社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

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

pladinty • 9 年前 • 3107 次点击  

在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
 
3107 次点击  
文章 [ 3 ]  |  最新文章 9 年前
MCC
Reply   •   1 楼
MCC    9 年前
form = Test_form(
            initial={
                'value': value,
                'value1': value}
        )

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

pladinty
Reply   •   2 楼
pladinty    9 年前

已经解决,报告一下,根据使用情况来看,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    9 年前
from django.shortcuts import get_object_or_404
form.record_user = get_object_or_404(User, id=user_p.id)

试一试