我知道这似乎是Django界的一个过于质疑的问题,但我不敢说我还没有找到解决方案。
我的模特 -
from djago.... import User
class InfoPersonal(models.Model):
...
person = models.OneToOneField(User)
我已尝试覆盖管理定义中的save_model()并覆盖表单中的save(),但似乎没有任何效果。
如果你要将一个ForeignKey或OneToOneField列中的数据自动添加到Model,你会怎么做?
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()}
答案 0 :(得分:1)
我得到了答案!我感觉很好!
personal = form.save(commit = False)
personal.person = request.user
personal.save()
这与Ignacio所说的非常相似,只有commit = False才是保存实例而不抛出异常的关键语句。谢谢所有帮助过的人!!
干杯
答案 1 :(得分: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
答案 2 :(得分:0)
看到这个
parent = models.ForeignKey('self', blank=True, null=True, verbose_name=_("parent"))
这个没问题,但是有sqlite的问题,把它改成postgresql就行了。 (它代表我的代码,将其更改为您的状态)