gpt4 book ai didi

python - 使用 Django 中的自定义外键字段从表单保存数据

转载 作者:行者123 更新时间:2023-11-28 18:53:56 29 4
gpt4 key购买 nike

我有以下模型类:

class ContactPerson(models.Model):            
name = models.CharField(max_length=30)

def __unicode__(self):
return self.name

class Appartment(models.Model):
contact_person = models.ForeignKey(ContactPerson)

问题:在模板文件中,我希望用户填写联系人姓名,因此我按如下方式覆盖了 contact_person 字段:

class AppartmentSellForm(ModelForm):
contact_person = forms.CharField(max_length=30)

class Meta:
model = Appartment

在我的 View 函数中,我正在执行以下操作以保存提交的表单中的数据:

def appartment_submit(request):
if request.method == "POST":
form = AppartmentSellForm(request.POST)
if form.is_valid():
appartment = form.save(commit=False) # ERROR HERE
cp = models.ContactPerson(name=form.cleaned_data['contact_person'])
appartment.contact_person = cp
appartment.save()
form.save();
return HttpResponseRedirect('/sell/')
else:
form = AppartmentSellForm()
return render_to_response('sell_appartment_form.html', {'form' : form})

错误信息:

#ValueError at /sell/sell_appartment/appartment_submit/

Cannot assign "u'blabla'": "Appartment.contact_person" must be a "ContactPerson" instance.**

我正在使用 SQLite 和 django 版本 1.1.1

问题:如何解决这个问题?

最佳答案

我认为您放入 View 中的代码更适合 ModelForm 的验证。

覆盖模型表单的 clean_contact_person 方法并在其中添加代码,以便 a) 检查名称是否有效,如果有效,b) 将表单字段的值设置为实际的 ContactPerson 实例。

类似的东西:(在我的脑海中)

class AppartmentSellForm(ModelForm):
contact_person = forms.CharField(max_length=30)

class Meta:
model = Appartment

def clean_contact_person(self):
name = self.cleaned_data['contact_person']
# check the name if you need to
try:
# maybe check if it already exists?
person = models.ContactPerson.objects.get(name=name)
except ContactPerson.DoesNotExist:
person = models.ContactPerson(name=name)
# you probably only want to save this when the form is saved (in the view)
return person

您的 View 可能仍需要使用 commit=False(因为您需要保存 ContactPerson 记录)。您可以使用 save_m2m 方法执行此操作。

the ModelForm documentation 中有关于 save_m2m 的更多信息和有关清洁领域的信息 the validation documentation .

希望对您有所帮助,祝您好运!

关于python - 使用 Django 中的自定义外键字段从表单保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218970/

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