以编程方式设置django ModelForm中排除字段的值

时间:2014-11-28 15:57:29

标签: python django

我有一个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

1 个答案:

答案 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