【发布时间】:2011-11-05 08:19:15
【问题描述】:
我有以下模型类:
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
在我的视图函数中,我正在执行以下操作来保存提交的表单中的数据:
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
问题:如何解决这个问题?
【问题讨论】:
-
那是一个相当旧的 Django 版本,你没有使用 1.3 有什么原因吗?
-
在修复所有错误和弃用警告后,更新可能会减轻您的进度,这确实更好。更多关于主题(具有尘土飞扬的 Django 技能),如果你打印 cp 变量,你会得到你所期望的吗?
-
@Jasper Kennis,代码在 cp 之前失败。但是,是的,如果我在上面注释掉一行并打印出来,这就是我所期望的。好吧,我正在升级我的 django 版本...
-
嗯,你能改变包含在表单中试图保存的值吗?在这种情况下,您应该将定义 cp 的行向上移动,并在对其运行 save() 之前更改表单值。
标签: python django forms foreign-keys