表单未保存 - form.is_valid() 返回 false



下面是我所有的模型。基本上这是一个拍卖网站

class Item(models.Model):
    name = models.CharField(max_length = 30)
    description = models.TextField()
    image = models.ImageField(upload_to='media/')
    category = models.CharField(max_length=100)
    ask = models.DecimalField(default=0, max_digits=6, decimal_places=2)
    created_at = models.DateTimeField(default=datetime.now, blank=True)
    closes = models.DateTimeField()
class Bid(models.Model):
    item = models.ForeignKey(Item)
    user = models.ForeignKey(User)
    price = models.DecimalField(default=0, max_digits=6, decimal_places=2)
    created_at = models.DateTimeField(default=datetime.now, blank=True)

这是形式:

class itemform(ModelForm):
    class Meta:
        model = Item
        fields =['name','description','image','category','ask','closes']

保存表单的视图:

def createitem(request):
    if request.method == "POST":
        form= itemform(request.POST, request.FILES)
        if form.is_valid():
            form.save()
        return redirect('/items') 
    else:    
        form = itemform()
        return render(request, 'app/create.html', {'form':form})

创建.html

{% extends 'app/layout.html' %}
{% block content %}
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p}}
        <button type ="submit">Save</button>
    </form>
{% endblock %}

您应该稍微更改视图,以便仅在表单有效时才重定向。当表单无效时,应重新呈现表单。

def createitem(request):
    if request.method == "POST":
        form= itemform(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('/items') 
    else:    
        form = itemform()
    return render(request, 'app/create.html', {'form':form})

这样,您将看到表单的错误消息,这应该可以帮助您找出问题所在。

最新更新