{% for obj in form %} {% if obj.name == "员工" %} {% with obj = res_id %} {{ obj }} {% endwith %} {% else %} <div class="form-group"> <lable>{{ obj.label }}</lable> {{ obj }} <span style="color: red">{{ obj.errors.0 }}</span> </div> {% endif %} {% endfor %}有什么问题,哪里写错了
时间: 2024-03-16 15:48:08 浏览: 127
这段代码是 Django 模板中的代码,其中 {% with %} 标签用于创建一个临时的变量,供模板中的其他部分使用。但是,在代码中, {% with %} 标签中的 obj 变量已经在 for 循环中定义了,因此在 {% with %} 标签中再次定义会导致冲突。正确的写法应该是:
```
{% for obj in form %}
{% if obj.name == "员工" %}
{% with res_id as obj %}
{{ obj }}
{% endwith %}
{% else %}
<div class="form-group">
<label>{{ obj.label }}</label>
{{ obj }}
<span style="color: red">{{ obj.errors.0 }}</span>
</div>
{% endif %}
{% endfor %}
```
这里使用了 as 关键字将 res_id 赋值给 obj,而不是重新定义 obj 变量。
相关问题
我写了下述代码用于检查紧急联系人的电话号码是否合法,但是在我在admin中为一个员工添加一个紧急联系人时,他不会报错,我需要怎么修改?class EmergencyAdmin(admin.ModelAdmin): list_display = ['staff_name', 'name', 'tel'] search_fields = ['res_id__NAME',] # 找到外键对应的表中的属性 def staff_name(self, obj): return obj.res_id.NAME # 将这个属性的标题行进行重命名 staff_name.short_description = '员工姓名' def formfield_for_dbfield(self, db_field, **kwargs) : formfield = super().formfield_for_dbfield(db_field, **kwargs) # 电话号码有效性验证 if db_field.name == 'tel' and isinstance(formfield.widget, TextInput): def validate_tel(value): if not value.isdigit() or len(value) != 11: raise ValidationError('请输入有效手机号码') formfield.widget.input_type = 'TEL' formfield.validators.append(validate_tel) return formfield
您可以尝试在EmergencyAdmin中添加一个clean()方法,以确保对于添加紧急联系人时输入的电话号码进行验证。例如:
```python
class EmergencyAdmin(admin.ModelAdmin):
list_display = ['staff_name', 'name', 'tel']
search_fields = ['res_id__NAME',]
def staff_name(self, obj):
return obj.res_id.NAME
staff_name.short_description = '员工姓名'
def formfield_for_dbfield(self, db_field, **kwargs):
formfield = super().formfield_for_dbfield(db_field, **kwargs)
if db_field.name == 'tel' and isinstance(formfield.widget, TextInput):
formfield.widget.input_type = 'TEL'
formfield.validators.append(validate_tel)
return formfield
def clean(self):
super().clean()
for form_data in self.cleaned_data:
if 'tel' in form_data:
tel = form_data['tel']
if not tel.isdigit() or len(tel) != 11:
raise forms.ValidationError('请输入有效手机号码')
```
这样,当您在添加一个紧急联系人时,如果输入的电话号码无效,将会抛出一个ValidationError。
// 分页 handleSizeChange(val) { this.pageSize = val this.handleNodeClick() }, handleCurrentChange(val) { this.page = val this.handleNodeClick() }, async getTreeListList() { const { data } = await businessTreeApi() this.departlist = JSON.parse(data.data) }, // 右侧上部分信息 async handleNodeClick(type) { console.log(type) if (type) { this.id = type.id } const List = (await businessApi(this.id)).data.data // this.datalist.agentId = type.id ? type.id : id // console.log(this.datalist) // const {data}= await courierPagingApi(this.datalist) // console.log(data); console.log(List) if (List.type === 1) { this.form.type = '一级转运中心' } else if (List.type === 2) { this.form.type = '二级转运中心' } else this.form.type = '营业部' this.form.number = List.id // v-model 数字 // this.form.type=List.type==3?'营业部':'', // 类型 this.form.name = List.name // 名字 this.form.region = List.province.name // 省 this.form.city = List.city.name // 城市 this.form.county = List.county.name // 县区 this.form.address = List.address // 详细地址 this.form.people = List.managerName // 负责人 this.form.phone = List.phone // 电话 this.form.longitude = List.longitude // 经度 this.form.latitude = List.latitude // 维度 // ------------------------------------ let obj = { page: this.page, pageSize: this.pageSize, agencyId: this.id } // 页码 const { data } = await getUserPageApi(obj) this.total = data.data.counts console.log(data.data) this.tableData = data.data.items this.total = Number(data.data.counts) // 下拉框数据 const res = await editAreasApi() console.log(res) this.economize = res.data.data if (this.value) { const ress = await editAreasApi(this.value) console.log(ress) } }, onSubmit() { this.isOk = !this.isOk } // 编辑数据 }
这段代码是关于一个树形结构的页面分页展示和编辑数据的处理,其中包括以下几个方法:
1. `handleSizeChange(val)`:处理每页展示数据量的变化,并调用`handleNodeClick()`方法重新渲染数据。
2. `handleCurrentChange(val)`:处理当前页码的变化,并调用`handleNodeClick()`方法重新渲染数据。
3. `getTreeListList()`:获取树形结构的数据,并将其解析为JSON格式。
4. `handleNodeClick(type)`:处理节点的点击事件,并根据节点类型展示对应的数据。同时,根据当前节点的ID,获取该节点下的用户数据,并展示在页面中。另外,还会获取下拉框数据。
5. `onSubmit()`:处理编辑数据的提交事件。
总体来说,这段代码实现了一个树形结构的页面展示和编辑数据的功能。
阅读全文