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

2024-09-27 21:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在表单.py在

from django import forms
from django.contrib.auth.models import User
from .models import Myhouses

class MyHouseEditForm(forms.ModelForm):    
    class Meta:        
        model = Myhouses        
        fields = ('author','name_of_accomodation', 'type_of_room', 'house_rent', 'availability', 'location', 'nearest_institution', 'description', 'image') 

我需要在用户登录时将'author'的值设置为当前用户。在

在模型.py在

^{pr2}$

在视图.py在

@login_required
def addlisting(request):    
    if request.method == 'POST': 
        form = MyHouseEditForm(request.POST, files=request.FILES)
        if form.is_valid():    
            Houses = form.save(commit=False)
            Houses.save()
            return redirect('addlisting')           
    else:        
        form = MyHouseEditForm()  

    return render(request, 'houses/addlisting.html', {'form':form })


Tags: django用户frompy模型importform信息
2条回答

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

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

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

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

相关问题 更多 >

    热门问题