保存django外键值

时间:2012-10-01 08:10:13

标签: python django

我创建了一个表单来添加产品,但是我在/ product / add_product /得到了 ValueError这样的错误/不能分配“u'1'”:“Product.category”必须是“Category”实例。< /强>

我假设它与未正确发送外键值有关,当我使用 print 语句时,我可以看到从表单传递的值,

我是否正确保存数据?

我的model.py

from django.db import models

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

    def __unicode__(self):
        return self.name

class Product(models.Model):
    category = models.ForeignKey(Category)
    product = models.CharField(max_length=250)
    quantity = models.IntegerField(default=0)
    price = models.FloatField(default=0.0)

    def __unicode__(self):
        return self.product

我的views.py

def add_product(request):
    post = request.POST.copy()

    category = post['category']
    product = post['product']
    quantity = post['quantity']
    price = post['price']

    new_product = Product(category = category, product = product, quantity = quantity, price = price )       
    return render_to_response('product/add_product.html')

编辑:这就是我的HTML页面形式

<form method="post" action="add_product/">
        {% csrf_token %}
        <label for="category">Category</label>
        <select name="category" id="category">
        {% for category in category_list %}
          <option> {{ category.id }} </option>
        {% endfor %}
        </select>

        <label for="product">Product</label>
        <input type="text" name="product" id="product">

        <label for="quantity">Quantitiy</label>
        <input type="text" name="quantity" id="quantity">

        <label for="price">Price</label>
        <input type="text" name="price" id="price">

        <input type="submit" value="Add New product" id="create">
    </form>

2 个答案:

答案 0 :(得分:2)

您使用的类别为category = post['category'],它会将post['category']作为unicode字符串,其值为id字段。而不是那样你可以做到

category = Category.objects.get(id=post['category'])

但我建议使用modelforms(如果你还没有)构建表单并保存对象,这些对象将为你提供更多的验证,错误处理等功能。

答案 1 :(得分:1)

没有。执行查找以查找实际模型,或在转换为数字后分配给equivalent backing field