Python 为什么是;字段是必填的“;在django中提交有效表单后,是否显示每个字段?

Python 为什么是;字段是必填的“;在django中提交有效表单后,是否显示每个字段?,python,django,Python,Django,当我提交表单时,它会显示一个空白表单,并为每个字段显示“字段是必需的”。但当我再次填写并提交时,它是有效的。为什么会这样 def forum_modules(request): if request.method == 'POST': pform = PostForm(data=request.POST, prefix='PostForm') if pform.is_valid(): new_post = pform.save(co

当我提交表单时,它会显示一个空白表单,并为每个字段显示“字段是必需的”。但当我再次填写并提交时,它是有效的。为什么会这样

def forum_modules(request):
    if request.method == 'POST':
        pform = PostForm(data=request.POST, prefix='PostForm')
        if pform.is_valid():
            new_post = pform.save(commit=False)
            new_post.user = request.user
            new_post.save()

            return HttpResponse("Post was successfully added")

    else:
        pform = PostForm()


    return render(request, 'forum/forum_modules.html', 'pform': pform})
PostForm:

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'body']
        exclude = ['user']
后模型:

class Post(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, )
    title = models.CharField(max_length=100)
    body = models.TextField()
    date = models.DateField(auto_now_add=True, blank=True)
    likes = models.IntegerField(default=0, blank=True)

    def __str__(self):
        return self.title

在POST上实例化时使用前缀,但在GET上不使用前缀。这意味着字段不匹配;在提交时,Django希望字段名以“PostForm”开头,但它不会输出表单中以“PostForm”开头的字段名


我不知道为什么要使用前缀——这里似乎不需要前缀——但如果需要,那么在实例化表单时,您需要在POST和GET块中使用前缀。

在POST上实例化时使用前缀,而在GET上不使用前缀。这意味着字段不匹配;在提交时,Django希望字段名以“PostForm”开头,但它不会输出表单中以“PostForm”开头的字段名


我不知道你为什么要使用前缀-这里似乎不需要它-但是如果你这样做,你需要在实例化表单时在POST和GET块中使用它。

表单
中的
prefix
参数,要么在GET和POST表单创建中使用它,要么在两个表单中都不使用它

def forum_modules(request):
    if request.method == 'POST':
        pform = PostForm(data=request.POST)
        if pform.is_valid():
            new_post = pform.save(commit=False)
            new_post.user = request.user
            new_post.save()
            return HttpResponse("Post was successfully added")
    else:
        pform = PostForm()
    return render(request, 'forum/forum_modules.html', 'pform': pform})

表单
中的
前缀
参数可以在GET和POST表单创建中使用,也可以不在这两个表单中使用

def forum_modules(request):
    if request.method == 'POST':
        pform = PostForm(data=request.POST)
        if pform.is_valid():
            new_post = pform.save(commit=False)
            new_post.user = request.user
            new_post.save()
            return HttpResponse("Post was successfully added")
    else:
        pform = PostForm()
    return render(request, 'forum/forum_modules.html', 'pform': pform})

代码在我看来很好。您需要使用
pdb
在函数中插入断点,并跟踪每一行的执行方式。也可以尝试其他浏览器。显示
PostForm
的代码我觉得代码很好。您需要使用
pdb
在函数中插入断点,并跟踪每一行的执行方式。也可以尝试其他浏览器。显示
PostForm
的代码,我明白了,谢谢您的澄清。现在可以了:)我明白了,谢谢你的澄清。现在它工作正常:))