python - 将表单集中的字段添加到 add_error
问题描述
我在 admin.py 中有以下代码:
from django.contrib import admin
from .models import Timesheet
from .models import Action
import requests
class ActionAdmin(admin.TabularInline):
model = Action
extra = 0
class TimesheetAdmin(admin.ModelAdmin):
inlines = [ActionAdmin]
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
url = 'https://xxx.xxxxxx.com/api.php'
contents = requests.get(url)
if contents.status_code == 200 and contents.json()['result'] == 'success':
instance.ticket_title = contents.json()['subject']
instance.save()
else:
form.add_error('?????', 'Ticket ID Not Found')
formset.save_m2m()
admin.site.register(Timesheet, TimesheetAdmin)
我在表单集中有ticket_id 字段。如果我通过'ticket_id',将发生此错误:
'TimesheetForm' has no field named 'ticket_id'.
没错,因为 ticket_id 不在 Timesheet 表单中,但它在 ActionForm 中,这是 Timesheet 表单中的一个表单集。
我应该将什么传递给 add_error 以指示此字段?
解决方案
查看add_error文档,该方法接受两个参数:
Form.add_error(field, error)
field 参数是应添加错误的字段的名称。如果其值为 None,则错误将被视为 Form.non_field_errors() 返回的非字段错误。
错误参数可以是一个简单的字符串,或者最好是 ValidationError 的一个实例。有关定义表单错误时的最佳实践,请参阅引发 ValidationError。
对于您的情况,您必须将其用作:
if contents.status_code == 200 and contents.json()['result'] == 'success':
instance.ticket_title = contents.json()['subject']
instance.save()
else:
form.add_error('ticket_id', 'Ticket ID Not Found')
推荐阅读
- python - 为什么如果a = =(“B”或“C”)在a==“C”时即使我使用括号也不生效?
- angularjs - 'Mat-icon' 不是已知元素,验证它是否是该模块的一部分?
- c# - 我可以在 DevExpress DataGridView 中的查找和显示 expr 之间设置不同的值吗?
- discord.js - message.awaitReactions 没有检测到我的反应
- youtube-dl - 巨大的播放列表,youtube-dl 不会下载所有视频
- javascript - 第一个函数在空时更快,但当两者都被填充时,第一个函数更慢
- mysql - MySQL 自动增量不是从 1 开始
- python - Python requests 模块似乎已安装,但未找到
- php - WooCommerce - 以销售价格添加到购物车链接
- docker - 容器退出时如何删除ip