gpt4 book ai didi

python - 如何在 ModelForm 的自定义表单字段中预填充值

转载 作者:行者123 更新时间:2023-11-28 21:25:38 24 4
gpt4 key购买 nike

假设我有一个模型如下。

模型.py

class Profile(models.Model):
user = models.OneToOneField(User)
middle_name = models.CharField(max_length=30, blank=True, null=True)

我在 ModelForm 中有一个自定义字段 email

表格.py

class ProfileForm(ModelForm):
email = forms.CharField()
class Meta:
model = models.Profile

fields = ('email', 'middle_name')

在设置上述模型表单的实例时,数据会预先填充到编辑模板的表单中,如下所示。

View .py

def edit_profile(request):
profile = models.Profile.objects.get(user=request.user)
profileform = forms.ProfileForm(instance=profile)
return render_to_response('edit.html', { 'form' : 'profileform' }, context_instance=RequestContext(request))

现在在表单中,我为配置文件模型下的所有字段预填充了所有值,但自定义字段为空,这很有意义。

但是有什么方法可以预填充自定义字段的值吗?也许是这样的:

email = forms.CharField(value = models.Profile.user.email)

最佳答案

我可以推荐其他东西吗?我不太喜欢在 Profile 的 ModelForm 中包含 email 字段,如果它与该模型无关的话。

相反,只拥有两种形式并将初始数据传递给包含 email 的自定义形式怎么样?所以事情看起来像这样:

表格.py

# this name may not fit your needs if you have more fields, but you get the idea
class UserEmailForm(forms.Form):
email = forms.CharField()

View .py

profile = models.Profile.objects.get(user=request.user)
profileform = forms.ProfileForm(instance=profile)
user_emailform = forms.UserEmailForm(initial={'email': profile.user.email})

然后,您要验证个人资料和用户电子邮件表单,但其他方面基本相同。

我假设您没有在 Profile ModelForm 和这个 UserEmailForm 之间共享逻辑。如果您需要配置文件实例数据,您可以随时将其传递到那里。

我更喜欢这种方法,因为它不那么神奇,如果你在一年后回顾你的代码,你不会想知道为什么,简单地扫描一下,为什么 emailModelForm 当它不作为该模型上的字段存在时。

关于python - 如何在 ModelForm 的自定义表单字段中预填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972201/

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