首页 > 解决方案 > 如何使用外键 django 创建表单

问题描述

我正在处理一个 Django 项目并收到下面的 Value 错误。我认为问题出在类别字段中,因为如果我将在 new.html 中对其进行评论,它会添加一个没有问题的列表。但是,我找不到错误在哪里:

/new 处的ValueError 视图auctions.views.add_listing 未返回HttpResponse 对象。它返回 None 。

这是我的models.py:

class Category(models.Model):
    name = models.CharField(max_length=64)

    def __str__(self):
        return self.name


class Listing(models.Model):
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=256)
    price = models.DecimalField(max_digits=24, decimal_places=2)
    photo = models.ImageField()
    bid = models.ForeignKey(Bid, on_delete=models.CASCADE, blank=True, null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
    category = models.ManyToManyField(Category, default=None, blank=True)

    def __str__(self):
        return self.title

视图.py:

def add_listing(request):
    if request.method == "POST":
        form = ListingForm(request.POST, request.FILES)
        print('FORM CREATED')
        print(form.is_valid())
        if form.is_valid():
            print('FORM IS VALID')
            print(form.cleaned_data)
            new_listing = form.save(commit=False)
            return HttpResponseRedirect(reverse(listing, args={new_listing.pk,}))
        else:
            pass
    else:
        return render(request, "auctions/new.html",{
            'category':Category.objects.all()
        })

新的.html:

<form action="" method="POST" name="listing" enctype="multipart/form-data">
    {% csrf_token %}
    <h4>Title</h4>
    <input type="text" name="title">

    <h4>Choose category</h4>

    <select name="category" id="">
        {% for type in category %}
        <option value="{{ type }}" name="category">{{ type }}</option>
        {% endfor %}
    </select>


    <h4>Description</h4>
    <input type="text" name="description">

    <h4>Price</h4>
    <input type="number" name="price">

    <h4>Photo</h4>
    <input type="file"  accept="image/*" name="photo" id="file">

    <!-- <p>Or provide URL of image</p>
    <input type="text" name="image_url"/> -->

    <input type="submit" value="Post"/>

</form>

表格.py:

class ListingForm(forms.ModelForm):
    category = forms.CharField()

    class Meta:
        model = Listing
        fields = [
            "title",
            "description",
            "price",
            "photo",
            "category"
        ]

    def save(self, commit=True):
        category, created = Category.objects.get_or_create(
            name = self.cleaned_data['category']
        )
        self.cleaned_data['category'] = category.id
        return super(ListingForm, self).save(commit)

    def __str__(self):
        return self.title

标签: pythondjangovalueerror

解决方案


推荐阅读