在 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。
我正在尝试在 Django 中按类别插入我的产品。我有两个模型产品和类别。我想在产品 table.when 中添加产品 我在 select 框和 select 类别中添加产品类别。类别值中的类别 ID。这是插入产品 table。类别是外键。但显示此错误:无法分配“
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。