Python 如何从save_formset访问Django模型字段
我在Django Model admin中有一个内联模型,我需要在保存项目之前创建一个条件,下面是我使用的代码:Python 如何从save_formset访问Django模型字段,python,django,django-models,django-modeladmin,Python,Django,Django Models,Django Modeladmin,我在Django Model admin中有一个内联模型,我需要在保存项目之前创建一个条件,下面是我使用的代码: class-prcitemline(管理列表行): def get_表单(自我、请求、obj=None、**kwargs): 表单=超级(PRCITEMINE,自我)。获取表单(请求,目标,**kwargs) form.base_字段['product'].widget.attrs['style']='width:50px;' 报税表 排序=['id'] 型号=PRCItem 额外=
class-prcitemline(管理列表行):
def get_表单(自我、请求、obj=None、**kwargs):
表单=超级(PRCITEMINE,自我)。获取表单(请求,目标,**kwargs)
form.base_字段['product'].widget.attrs['style']='width:50px;'
报税表
排序=['id']
型号=PRCItem
额外=1
自动完成_字段=[
“产品”,
“供应商”,
]
字段=(
“产品”,第1页
“数量”2
“单一价值”已更新,#4
“发布状态”,
“批准状态”,
“接收状态”,
)
只读_字段=[“发布_状态”,
“批准状态”,
“接收状态”,
]
def保存表单集(自我、请求、表单、表单集、更改):
obj=form.instance
如果obj.purchase\u request.is\u analizer:
返回HttpResponse(“您无法更改此设置”)
其他:
obj.save()
如您所见,我使用了save_formset
方法来访问模型的字段,然后根据它进行过滤。但不管我添加了If语句,它都只会保存这些项 第一件事:
列表项save\u formset
不应返回任何内容,而HttpResponse
将不适用于您。
即使会,这也不是正确的方式。不提这将不是很有信息性
第一种解决方案
obj.purchase\u request.is\u analizer
应在表单验证期间完成
在那里引发的任何ValidationError
都将传播到表单集,并显示在相关表单旁边的错误消息中
class PRCItemForm(forms.ModelForm):
def validate(self):
if obj.purchase_request.is_analizer:
raise ValidationError("You can't change this")
def get_queryset(self):
qs = super().get_queryset()
return qs.exclude(purchase_request__is_analizer=True)