【问题标题】:Django: Save id on a OneToOneFieldDjango:在 OneToOneField 上保存 id
【发布时间】: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

【问题讨论】:

    标签: django foreign-keys models


    【解决方案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) 创建可变对象。太棒了!
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 2020-08-13
    • 2014-04-30
    • 1970-01-01
    • 2014-09-15
    • 2013-04-20
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多