gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:43:03 24 4
gpt4 key购买 nike

我有一个 ModelForm 类,我想在其中从表单中排除其中一个字段 (language) 并以编程方式添加它。我尝试在 clean 方法中添加语言,但得到了 IntegrityError(“Column 'language_id' cannot be null”)。我认为这是因为 clean() 返回的任何 language 数据都将被忽略,因为它位于排除元组中。我在 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

最佳答案

您可以做的是,当您在 View 中保存表单时,您不提交数据。然后您可以以编程方式设置排除字段的值。当我有一个用户字段并且我想排除该字段并设置为当前用户时,我经常遇到这种情况。

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

关于python - 以编程方式在 django ModelForm 中设置排除字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27192251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com