Python 如何为django modelform字段设置动态初始值

Python 如何为django modelform字段设置动态初始值,python,django,forms,web,Python,Django,Forms,Web,我是django的新手,我需要为我的modelform字段设置一个动态初始值。我的模型名“author”中有一个数据库字段,它有一个foreignkey将其连接到django用户模型。我需要在用户在表单中填写信息时自动将其设置为当前用户。 从我收集的关于这个问题的信息来看,我必须在下面的MyHouseEditForm中定义一个\uuuu init\uuuu函数,我是django的新手,我看到的所有示例都非常混乱 forms.py 来自django导入表单的 从django.contrib.aut

我是django的新手,我需要为我的modelform字段设置一个动态初始值。我的模型名“author”中有一个数据库字段,它有一个foreignkey将其连接到django用户模型。我需要在用户在表单中填写信息时自动将其设置为当前用户。 从我收集的关于这个问题的信息来看,我必须在下面的MyHouseEditForm中定义一个
\uuuu init\uuuu
函数,我是django的新手,我看到的所有示例都非常混乱

forms.py

来自django导入表单的

从django.contrib.auth.models导入用户
从。模型导入我的房子
类MyHouseEditForm(forms.ModelForm):
类元:
模型=我的房子
字段=(‘作者’、‘住宿单位名称’、‘房间类型’、‘房屋租金’、‘可用性’、‘位置’、‘最近的机构’、‘描述’、‘图像’)
每当用户登录时,我需要将“author”的值设置为当前用户

models.py

来自django.db导入模型的

从django.contrib.auth.models导入用户
类别MyHouse(models.Model):
author=models.ForeignKey(用户,on_delete=models.SET_NULL,NULL=True,blank=True,相关的_name='author')
可用='A'
不可用='NA'
可用性=(
(可用,“可用”),
(不可用,“不可用”),
)
住宿的名称=models.CharField(最大长度=200)
房间的类型=型号。CharField(最大长度=200)
house\u rent=models.IntegerField(null=True)
可用性=models.CharField(最大长度=2,选项=可用性,默认值=可用性,)
位置=型号.CharField(最大长度=200)
最近的机构=型号。CharField(最大长度=200)
description=models.TextField(空白=True)
image=models.ImageField(上传到class='profile\u image')
定义(自我):
返回住宿的自我名称
views.py

@需要登录\u
def添加列表(请求):
如果request.method==“POST”:
form=MyHouseEditForm(request.POST,files=request.files)
如果form.is_有效():
Houses=form.save(commit=False)
房子。保存
返回重定向('addlisting')
其他:
form=MyHouseEditForm()
返回呈现(请求'houses/addlisting.html',{'form':form})

无需在表单中显示作者字段。它将自动填充登录用户

request.user为您提供登录的用户对象。因此,您可以从表单字段部分删除“作者”字段,并执行以下操作:

Houses = form.save(commit=False)
Houses.author = request.user
Houses.save()

我在序列化程序中做了类似的操作

我定义了如下自定义创建方法:

class MyhousesSerializer(FlexFieldsModelSerializer):
...

    def create(self, validated_data):
        validated_data['author'] = self.context['request'].user

        newhouse = Myhouses.objects.create(**validated_data)

        return newhouse

如果您使用更常规的模型序列化程序,这并不重要。

查看您的代码,我想您真正需要的是在表单保存时将登录的用户保存到
author
字段中。如果是这样,您只需在house.save()之前使用
house.author=request.user
。此外,您还应在作者字段定义中将
User
更改为
settings.AUTH\u User\u MODEL
。见