Django:在 OneToOneField 上保存 id
Posted
技术标签:
【中文标题】Django:在 OneToOneField 上保存 id【英文标题】:Django: Save id on a OneToOneField 【发布时间】:2013-03-10 01:50:14 【问题描述】:型号:
class UserDataUpdate(models.Model):
code = models.CharField(max_length=8)
address = models.CharField(max_length=50)
class UserSurvey(models.Model):
about_treatment = models.CharField(max_length=2)
user_data_update = OneToOneField(UserDataUpdate)
观看次数:
@login_required
def generate_survey(request):
user_data_update = UserDataUpdate.objects.get(code=request.user.username)
if request.method == 'POST':
form = SurveyForm(request.POST)
if form.is_valid():
form.save()
return redirect('/success')
else:
form = SurveyForm(request.GET)
return render_to_response(
'survey.html',
'form': form ,
context_instance = RequestContext(request))
表格:
class SurveyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SurveyForm, self).__init__(*args, **kwargs)
for field in self.fields.values():
field.widget = Radioselect(choices=SURVEY_CHOICES)
class Meta:
model = Survey
exclude = ['user_data_update']
我只需要一种方法来在 UserSurvey 上设置 UserDataUpdate id(已经创建)。
我在 generate_survey request.POST 上收到这条消息:
user_data_update_app_usersurvey.user_data_update_id may not be NULL
【问题讨论】:
【参考方案1】:您应该清楚您获得了user_data_update
值,但随后不对其进行任何操作。我猜你想在表单创建的对象上设置它:
if form.is_valid():
instance = form.save(commit=False)
instance.user_data_update = user_data_update
instance.save()
(我不明白表单的 __init__
方法中的所有内容应该做什么。无论如何,您的表单中只有一个字段。)
【讨论】:
与原来的相比,这个用户调查缺少很多属性。此表单的想法是设置所有字段以使用带有单个 CHOICE 的 RadioSelect 呈现。顺便说一句,谢谢你的例子,它工作得很好。从未使用 (commit=False) 创建可变对象。太棒了!以上是关于Django:在 OneToOneField 上保存 id的主要内容,如果未能解决你的问题,请参考以下文章
django 的 OneToOneField 和 django 的 OneToOneRel 的区别
如何模仿 django admin 的 OneToOneField 可选表单
为啥 django-rest-framework 不显示 OneToOneField 数据 - django
十一 .Django 一对一表OneToOneField (ORM)