Django设置了ModelForm字段,但未将其包含在表单中

Mik*_*ynn 1 forms django

在我的应用程序中,我有User创建Post对象。每个Post都有一个User

class Post(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    ...
Run Code Online (Sandbox Code Playgroud)

我想创建一个提交后的表单以进行编辑和提交,因此我打算使用Django的ModelForm功能。

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = "__all__"
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,那么查看表单的任何人都可以设置Post作者的身份。我想确保结果user字段是它们。但是,如果我user从ModelForm中排除该字段,

class PostForm(ModelForm):
    class Meta:
        model = Post
        exclude = 'user' 
Run Code Online (Sandbox Code Playgroud)

那么将不会在表单提交上设置用户。我通过制作自定义表单和更新post字段来解决此问题

def submit_view(request):
    .... 
    request.POST = request.POST.copy()
    request.POST.update({
        'user' : request.user.id
    })

    form = PostForm(request.POST, request.FILES)
    .... 
Run Code Online (Sandbox Code Playgroud)

但是后来我失去了自动UI生成和表单验证的功能,这在某些方面违反了Form类的目的。有人能指出我设置user字段的惯用方式Form吗?

fre*_*o.r 5

试试这个视图:

def submit_view(request):
   form = PostForm(request.POST or None)
   if form.is_valid():
      new_post = form.save(commit=False)
      new_post.user = request.user
      new_post.save()
Run Code Online (Sandbox Code Playgroud)