在Django中按类别添加产品,而无需使用form.py

我正在尝试按类别在django中插入产品。我有两个模型产品和类别。我想在产品表中添加产品。当我在选择框中添加产品类别并选择类别时,类别值中的类别ID 。插入到产品表中。类别为ForeignKey。但是显示此错误:无法分配“'1'”:“ Product.p_c_name”必须是“ Category”实例。 1是类别ID的值。 model.py:

from django.db import models
from django import forms
# Create your models here.
class Category(models.Model):
    c_name = models.CharField(max_length=50)


    def _str_(self):
        return self.c_name

class Product(models.Model):
    p_name = models.CharField(max_length=255)
    p_desc = models.TextField()
    p_price = models.CharField(max_length=255)
    p_date=models.DateTimeField(auto_now_add=True)
    status = models.BooleanField()
    p_c_name = models.ForeignKey(Category,on_delete=True)
    image = models.ImageField()


    def __str__(self):
        return self.p_name

我的view.py:

# Product Start form here
def product_add(request):
    print(request.POST)
    cats = Category.objects.all()
    if request.method == 'POST' and request.FILES['image']:

        p_name = request.POST['p_name']
        p_desc = request.POST['p_desc']
        p_price = request.POST['p_price']
        p_c_name = request.POST['p_c_name']

        status = 0

        myfile = request.FILES['image']
        fs = FileSystemStorage()
        filename = fs.save(myfile.name,myfile)
        uploaded_file_url = fs.url(filename)
        data = Product(p_name=p_name,image=filename,p_desc=p_desc,p_price=p_price,p_c_name=p_c_name,status=status)
        data.save()


        return redirect('/product/product-list',{
            'uploaded_file_url': uploaded_file_url
        })
    else:
        return render(request,'product/add.html',{'cats':cats})  

我的form.html:

<form class="text-center border border-light p-5" method="POST" action=""enctype="multipart/form-data">
{% csrf_token %}  


    <!-- Name -->
    <input type="text" id="defaultContactFormName" class="form-control mb-4"name="p_name" placeholder="Product Name">
    <input type="text" id="defaultContactFormName" class="form-control mb-4"name="p_price" placeholder="Product Price">
    <textarea class="form-control mb-4" name="p_desc"id="exampleFormControlTextarea5" rows="3"placeholder="Product Description"></textarea>
    <select class="form-control mb-4"name="p_c_name">
    <option selected disabled>Select Category</option>

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

    </select>
    <input type="file" id="defaultContactFormName" class="form-control mb-4"name="image">


    <!-- Send button -->
    <button class="btn btn-info btn-block" type="submit">Save</button>

</form>
loveqq_nju 回答:在Django中按类别添加产品,而无需使用form.py

在创建Product之前,您需要获取Category对象,因为它是一个ForeignKey关系。

category = Category.objects.get(id=p_c_name)  
  # in your case p_c_name is the category id

data = Product(
    p_name=p_name,image=filename,p_desc=p_desc,p_price=p_price,p_c_name=category,status=status
)
,

这是因为您需要实例化“类别”

从.models导入产品,类别

def product_add(request):

    category = get_object_or_404(Category,pk= p_c_name)

    data=Product(p_name=p_name,p_c_name_id=category.id,status=status)
    data.save()
本文链接:https://www.f2er.com/3092958.html

大家都在问