gpt4 book ai didi

python - 在 Django ModelForm 中添加并初始化自定义字段

转载 作者:行者123 更新时间:2023-11-30 22:25:13 28 4
gpt4 key购买 nike

我觉得我错过了一些非常基本的点,但无法解决这个问题。
假设我有这样的模型:

class Person(models.Model):
first_name = models.CharField(max_length=256, blank=True)
# this is weird field, but needed for my usecase
last_name = models.WeirdCustomField(max_length=256, blank=True)

为此有一个表格,我想对其进行一些自定义(评论):

class PersonForm(forms.ModelForm):

class Meta:
model = Address
# I want to override 'last_name' field, so exclude it here
exclude = ['last_name']

# And add additional field
my_field = ChoiceField(choices=list_of_choicec)
last_name = forms.CharField()

def __init__(self, *args, **kwargs):
last_name = kwargs.pop('last_name', None)
my_field = kwargs.pop('my_field', None)
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['last_name'] = last_name
self.fields['my_field'] = my_field

现在,在 shell 中(在所有导入之后...)

person = Person.objects.get(first_name='Jacob')
person.first_name # Prints 'Jacob', correct!
form = PersonForm(instance=person, last_name='Smith', my_field='test123')
form['first_name'].value() # -> 'Jacob', that's right
form['last_name'].value() # -> nothing, I expected 'Smith'
form['my_field'].value() # -> nothing, I would like to see 'test123'

我想我在互联网上挖掘得很深,但找不到此类问题的解决方案。

最佳答案

您必须设置初始值。在您的 init 中尝试替换为以下代码。

self.fields['last_name'].initial = last_name
self.fields['my_field'].initial = my_field

创建表单实例时也可以传递首字母。

form = PersonForm(instance=person, initial={'last_name'='Smith', 'my_field'='test123'})

这是推荐的方法。根本不必重写 init 方法。

关于python - 在 Django ModelForm 中添加并初始化自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47592828/

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