Py学习  »  问与答

关于使用modelform时存储外键字段的问题

pladinty • 8 年前 • 2532 次点击  

在model中存在一个外键,指向user模型,modelform中会提交存储此字段,现在需要从request中获取user对象后直接存储进此form中,而不是用户填写,这个字段设置成hidden的,但是每次提交都报错,请问应该如何解决。 代码如下: form: class GameForm(forms.ModelForm):

record_user = forms.ModelChoiceField(widget=forms.HiddenInput(),label='记录者',required=False,queryset=UserProfile.objects.all())
# An inline class to provide additional information on the form.
class Meta:
    # Provide an association between the ModelForm and a model
    model = Game
    fields = ('record_user')

views:

        user_p = UserProfile.objects.get( user = request.user)
        form.record_user = user_p.id
        print(form.record_user)
        form.save()

感觉上面的form.record_user = user_p.id完全没有将对应的值赋进去,把id去掉也报错,只有将form中的record_user注释掉,页面会直接出现record_user的选择字段,此时选择后可以保存,但是貌似和form.record_user = user_p.id中的user无关,可以选择其他用户保存成功。 请问此类foreignkey应该如何赋值才能正确?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1183
 
2532 次点击  
文章 [ 3 ]  |  最新文章 8 年前
MCC
Reply   •   1 楼
MCC    8 年前
form = Test_form(
            initial={
                'value': value,
                'value1': value}
        )

form不是还有这个用法么,在发给前段之前先initial一下recore_user不知道是否可行?

pladinty
Reply   •   2 楼
pladinty    8 年前

已经解决,报告一下,根据使用情况来看,form中的属性是不可改变的,因此代码应该这么写,最终修改的是根据form.save方法返回的model类,然后修改model类的属性再save就行了 代码:

game = form.save(commit=False) user_p = UserProfile.objects.get( user = request.user) game.record_user = user_p game.save()

MCC
Reply   •   3 楼
MCC    8 年前
from django.shortcuts import get_object_or_404
form.record_user = get_object_or_404(User, id=user_p.id)

试一试