我有这个:
class OrderForm(ModelForm):
class Meta:
model = Order
exclude = ('number',)
def __init__(self, *args, **kwargs):
super(OrderForm, self).__init__(*args, **kwargs)
if self.initial.get('account', None):
self.fields['customer'].queryset = Customer.objects.filter(account=self.initial.get('account'))
def save(self, force_insert=False, force_update=False, commit=True):
m = super(OrderForm, self).save(commit=False)
# my custom code was here
if commit:
m.save()
return m
这是有效的,除了我需要将“Order”(必需)的“number”属性设置为某个数字。我不知道怎么做。我尝试添加:
self.fields['number'] = 50
在“save()”方法中,但是在单击“保存”时仍然会出现IntegrityError(显然这不是正确的语法,但它暗示了我正在尝试做的事情)。我遇到的另一个问题是,我现在甚至无法访问字段['number'],因为它位于排除Meta属性中(我不希望人们能够编辑它,或者它是一个)
我应该在我的模型的“save()”方法中,或者在“ init ()”中执行此操作吗?
答案 0 :(得分:3)
这似乎在模型中会更清晰。这将是模型的保存方法中的语法:
def save(self, force_insert=False, force_update=False):
self.number = 50
super(Order, self).save(force_insert, force_update)
如果您真的要每次都这样设置它,那么您可以在Order模型中将其声明为:
class Order(models.Model):
number = models.IntegerField(default=50)
答案 1 :(得分:1)
我认为这是你应该在“干净”方法中做的事情。 django表单验证文档是here。基本上它会为您提供已清理字段的字典,然后允许您进行更复杂的验证,需要来自众多字段的信息。您可以返回更正数据的字典...包括您需要添加或覆盖的任何内容。
如果您包含模型的代码,那么我们可以提供更多帮助。
答案 2 :(得分:0)
m.number = 50
你在哪里
# my custom code was here
self.fields
是字段列表,而不是其值。如果要访问这些值,请使用self.cleaned_data
。这对self.save()
无效,但使用m.number
因为m
是创建的实例。