在 Django 中按类别添加产品

Add Product by Category in Django

我正在尝试在 Django 中按类别插入我的产品。我有两个模型产品和类别。我想在产品 table.when 中添加产品 我在 select 框和 select 类别中添加产品类别。类别值中的类别 ID。这是插入产品 table。类别是外键。但显示此错误:无法分配“, , ]>”:“Product.category”必须是“类别”实例.

model.py:

from django.db import models
from django.forms import ModelForm

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

    def __str__(self):
        return self.name


class Product(models.Model):
    label = models.CharField(max_length=50)
    description = models.CharField(max_length=200)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
    quantity = models.IntegerField()

    def __str__(self):
        return self.label

view.py :

def add_product(request):
    print(request.POST)
    p_category = Category.objects.all()
    if request.method == 'POST':

        label = request.POST['label']
        description = request.POST['description']
        quantity = request.POST['quantity']
        category = request.POST['category']

        data = Product(
            label=label,
            description=description,
            quantity=quantity,
            category=p_category
            )
        data.save()


        return HttpResponseRedirect('/products/')
    else:
        form = AddProduct()

    return render(request, 'product/add_product.html', {'form': form, 'p_category':p_category})

add_product.html

<form action="/add-product/" method="post">
    {% csrf_token %}
    <label for="label">Label: </label>
    <input id="label" type="text" name="label" value="">

    <label for="description">Description: </label>
    <input id="description" type="text" name="description" value="">

    <label for="quantity">Quantity: </label>
    <input id="quantity" type="text" name="quantity" value="">

    <select class="form-control mb-4" name="category">
        <option selected disabled>Select Category</option>

        {% for cat in p_category %}
        <option value="{{cat.id}}">{{cat.name}}</option>
        {% endfor %}

    </select>

    <!--    {{ form }} -->
    <input type="submit" value="Submit">
</form>

您需要创建一个可以在产品中作为外键引用的主键 table 尝试在您使用的任何一种 sql 中创建一个字段 ID 作为主键然后设置 id= models.BigAutoField(primary_key=真) 那么您可以在您的产品上参考以下内容 table

您在这里要做的是向 ForeignKey 字段添加一个 QuerySet。这就是您收到错误的原因。

def add_product(request):
    p_category = Category.objects.all()
    if request.method == 'POST':

        label = request.POST['label']
        description = request.POST['description']
        quantity = request.POST['quantity']
        category = Category.objects.get(id = request.POST['category'])

        data = Product(
            label=label,
            description=description,
            quantity=quantity,
            category=category
            )
        data.save()


        return HttpResponseRedirect('/products/')
    else:
        form = AddProduct()

    return render(request, 'product/add_product.html', {'form': form, 'p_category':p_category})

我把id信息中category.objects.get()相关的category赋值给category变量,发给Product class。