模板选取字典最后一个值
要使用自定义过滤器
模板自带的make_list过滤器没什么用,它只会把所有传入的参数转成字符串再一个一个的切片['s','t','r']
myapp_extras.py
from django import templateregister = template.Library()@register.filterdef getlastkv(value):lastkey = list(value)[-1]lastvalue = value[lastkey]v = lastkey+':'+lastvaluereturn v
mytemplate.html
{% for item in apply_all %}{{item.procedure|getlastkv}}{% endfor %}
models.py
class Apply(models.Model):procedure = models.JSONField()
自定义表单form的错误信息error_message
从模型生成的表单
class SupplierForm(ModelForm):class Meta:model = Supplierfields = '__all__'error_messages = {'fieldname':{'unique':'该字段禁止重复!'},}
后台获取多选select的值
<select name="material" class="js-example-basic-multiple" multiple="multiple">{% for obj in tags %}<option value="{{ obj.pk }}">{{obj}}</option>{% endfor %}</select>
views.py
mt = self.request.GET.getlist("material")
获取模型字段所有的属性(fields)名称/值
只需要获取model的全部fields名字
views.py
from .models import Bargain # 导入模型(model)field_list = [f.verbose_name for f in Bargain._meta.fields]
需要获取model下每个实例对应field的值
models.py
TYPE_CHOICES = [('0','工艺设备'),('1','电气仪控'),('2','其他'),]class Bargain(models.Model):itemType = models.CharField(verbose_name='设备类型',max_length=1,choices=TYPE_CHOICES,default='0',blank=True,null=True)def get_fields_value_dict(self):return {field.verbose_name:field.value_from_object(self)if field.value_from_object(self) else ''for field in self.__class__._meta.fields}
需要注意构建的这个方法只会记录字段的值,这里返回的字典是{'设备类型':'0'},要显示工艺设备,目前好像只能在获取字典后再修改,dict['设备类型'] = bargain.get_itemType_display()。目前field只有value_from_object可以返回值。
表单验证错误时修改widget的attr
forms.py
from django.forms import ModelFormfrom .models import Sampleclass SampleForm(ModelForm):class Meta:model = Samplefields = '__all__'widgets = {'address': TextInput(attrs={'class': 'form-control', 'placeholder': "地址"})}# 重写__init__来修改attrdef __init__(self, *args, **kwargs):if self.errors:err_keys = list(self.errors.keys())for k in err_keys:self.fields[k].widget.attrs.update({'class':"form-control is-invalid"})
