我有一个ModelForm
类,我希望从表单中排除其中一个字段(language
)并以编程方式添加它。我尝试在clean方法中添加语言,但得到IntegrityError
("Column 'language_id' cannot be null"
)。我认为这是因为language
返回的clean()
的任何数据都会被忽略,因为它在排除元组中。我在ModelAdmin
课程中使用该表单。我还没有设法找到解决这个问题的方法,所以任何提示或提示都会非常感激。
from django import forms
from myapp import models
from django.contrib import admin
class DefaultLanguagePageForm(forms.ModelForm):
def clean(self):
cleaned_data = super(DefaultLanguagePageForm, self).clean()
english = models.Language.objects.get(code="en")
cleaned_data['language'] = english
return cleaned_data
class Meta:
model = models.Page
exclude = ("language",)
class PageAdmin(admin.ModelAdmin):
form = DefaultLanguagePageForm
答案 0 :(得分:6)
您可以做的是当您在视图中保存表单时,您不会提交数据。然后,您可以以编程方式设置排除字段的值。当我有一个用户字段并且我想要排除该字段并设置为当前用户时,我遇到了很多。
form = form.save(commit=False)
form.language = "en"
form.save()
这里有关于commit = False的更多信息 - > https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#the-save-method