首页 > 解决方案 > 无法相应提交 Django 表单

问题描述

视图.py

@login_required(login_url='login/')
def add_country(request):
    if request.method == 'POST':
        form = CountryForm(request.POST,request.FILES)
        if form.is_valid():
            new_form = form.save(commit=False)
            new_form.edited_by = request.user
            new_form.save()
            return redirect('country_details')
    else:
        form = CountryForm()

    context = {'form':form}
    return render(request,'add_country.html',context)

模型.py

class Countries(models.Model):
    CONTINENTS = [
        ('Asia','Asia'),
        ('Europe','Europe'),
        ('Africa','Africa'),
        ('Oceania','Oceania'),
        ('North America','North America'),
        ('South America','South America'),
    ]
    name = models.CharField(max_length=75)
    continent = models.CharField(max_length=50,choices=CONTINENTS,null=True)
    landmark = models.CharField(max_length=100,null=True)
    food = models.CharField(max_length=100,null=True)
    entertainment = models.CharField(max_length=100,null=True)
    flag = models.FileField(upload_to='flags', default='default.png',null=True)
    image = models.FileField(upload_to='travel', default='default.png',null=True)
    edited_by = models.OneToOneField(User,on_delete=models.CASCADE,null=True)
    last_updated = models.DateTimeField(auto_now_add=True,null=True)
    
    def __str__(self):
        return self.name

add_country.html

<form method="POST" action="" enctype="multipart/form-data">
        {% csrf_token %}

        {{ form.name.label }}<br>
        {{ form.name }}<br><br>
        {{ form.landmark.label }}<br>
        {{ form.landmark }}<br><br>
        {{ form.food.label }}<br>
        {{ form.food }}<br><br>
        {{ form.entertainment.label }}<br>
        {{ form.entertainment }}<br><br>
        {{ form.flag.label }}<br>
        {{ form.flag }}<br><br>
        {{ form.image.label }}<br>
        {{ form.image }}<br><br>
       
        <input type="submit" class="btn btn-primary" value="Add">
    </form>

我有一个问题,在我添加edited_by将当前登录的用户分配到该列之后,表单无法提交,只能停留在同一页面上,而不是重定向到我想要的页面。我尝试了不同的方法来提交表单,例如 putrequest.method == "POST"并且页面不起作用。然而,在我添加edited_by到模型中之前,可以相应地提交表单并更新数据。请问edited_by用户添加帖子后将用户分配到列中的方法是什么?

标签: pythondjangoweb

解决方案


我认为您在表单中也包含edited_by了字段。如果您在视图中自己处理此字段,请从表单中删除此字段。

class CountryForm(forms.ModelForm):
     class Meta:
        model = Country
        exclude = ['edited_by'] # or specify only required fields in form

现在您的视图将正常工作。

注意:您可以{{form.errors}}在模板中显示表单的错误。


推荐阅读