假设我有一个模型User
,其中有一个credits
字段(IntegerField
)。当用户注册时,我会将credits
字段设置为0
,我会针对某些事件更新credits
。
我不希望用户知道db表中有这样的字段。
我应该在该字段中设置什么属性?
答案 0 :(得分:1)
要完成对0
部分的默认,您只需使用模型字段的default
参数。
对于您不希望用户了解该字段的部分,您有几个选择。
Field.editable
如下定义字段将导致该字段永远不会以模型形式显示。
credits = models.IntegerField(default=0, editable=False)
def clean_credits(self):
不会运行)ModelForm.exclude|fields
为模型创建ModelForm
是您将要做的事情。您可以在表单的exclude
类中定义Meta
属性,并将"credits"
添加到列表中。请参阅上面链接的文档。您可以在fields
类上定义Meta
,并省略"credits"
。后两种选择被认为是一种更好的做法,特别是在与安全性有关时,被称为whitelist。
exclude
或fields
处理指定"秘密"的正确方法当字段不在表单中时,字段的值为:
# Inside your view's post method (or FormView.form_valid, if you're using generic views)
instance = form.save(commit=False) # Does everything except INSERT into the database
instance.credits = <however many credits you feel like giving the user>
instance.save()
如果您没有这样做,而只是按原样保存表单,则default
指定的值将设置为实例的credits
字段。< / p>
答案 1 :(得分:0)
您需要使用默认值为0的IntegerField:credits = models.IntegerField(default=0)
。请注意不要以任何形式或显示用户时向用户显示此字段。
例如,如果您ModelForm
有User
,请不要在credits
的{{1}}字段中加入fields