(Django) (外键问题) model.person_id 可能不能为空
我知道这个问题在Django的圈子里被问得很多,但我很遗憾地说,我还没有找到解决办法。
我的模型是 -
from djago.... import User
class InfoPersonal(models.Model):
...
person = models.OneToOneField(User)
我尝试过在管理后台的定义中重写save_model(),也尝试过在表单中重写save(),但似乎都没有效果。
如果你想自动在一个外键(ForeignKey)或一对一字段(OneToOneField)中添加数据到模型里,你会怎么做呢?
def profile_creation_personal(request):
if request.method == 'POST': # If the form has been submitted...
form = PersonalForm(request.POST) # A form bound to the POST data
# form.person = request.user
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
form.save()
return HttpResponseRedirect('/done') # Redirect after POST
else:
form = PersonalForm() # An unbound form
return render_to_response('info/personal/profile_create.html', { 'form': form,})
class PersonalForm(ModelForm):
#hometown_id = ModelChoiceField(queryset=InfoReferenceCities.objects.all(),empty_label=None)
def save(self, *args, **kwargs):
self.person = request.user
super(PersonalForm, self).save(*args, **kwargs)
class Meta:
model = InfoPersonal
exclude = ('person',)
widgets = {'dateofbirth' : SelectDateWidget()}
3 个回答
0
在你的PersonalForm中,你可以对save()这个函数进行子类化,这样就能添加合适的数据,像这样:
class PersonalForm(ModelForm):
def save(self, *args, **kwargs):
self.person = request.user
super(PersonalForm, self).save(*args, **kwargs)
class Meta:
model = Personal
0
看看这个
parent = models.ForeignKey('self', blank=True, null=True, verbose_name=_("parent"))
这个没问题,但在使用sqlite时有点问题,换成postgresql就没事了。(这是针对我的代码,你可以根据自己的情况进行修改)
1
我找到答案了!!!我感觉很好!
personal = form.save(commit = False)
personal.person = request.user
personal.save()
这就像Ignacio说的那样进入视图,唯一需要注意的是commit = False,这个语句很重要,它可以让你保存一个实例而不会出现错误。感谢所有帮助过我的人!!
干杯!