2011-11-29 32 views
4

當我嘗試向我的模型添加/發佈數據時遇到問題。 這是我已經在我的Python manage.py殼做:ValueError:無法在django中分配

>>> from booking.models import * 
>>> qa = Product.objects.get(id=5) 
>>> sd = Booking.objects.create(
... date_select = '2011-11-29', 
... product_name = qa.name, 
... quantity = 1, 
... price = qa.price, 
... totalcost = 20, 
... first_name = 'lalala', 
... last_name = 'sadsd', 
... contact = '2321321', 
... product = qa.id) 
Traceback (most recent call last): 
    File "<console>", line 10, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 138, in create 
    return self.get_query_set().create(**kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 358, in create 
    obj = self.model(**kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 352, in __init__ 
    setattr(self, field.name, rel_obj) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 331, in __set__ 
    self.field.name, self.field.rel.to._meta.object_name)) 
ValueError: Cannot assign "5": "Booking.product" must be a "Product" instance. 

我沒有任何想法,這是爲什麼發生的事情...... 是product = qa.id不等於Booking.product?

這裏是我的model.py

from django.db import models 

# Create your models here. 
class Product(models.Model): 
    name = models.CharField(max_length=50, null=True, unique=False) 
    quantity = models.IntegerField(max_length=10, null=True) 
    price = models.FloatField() 
    def __unicode__(self): 
     return self.name 

class Booking(models.Model): 
    date_select = models.DateField(auto_now=False, auto_now_add=False) 
    product_name = models.CharField(max_length=50, blank=True, null=True) 
    quantity = models.IntegerField(max_length=10, blank=True, null=True) 
    price = models.FloatField() 
    totalcost = models.FloatField() 
    first_name = models.CharField(max_length=50, null=True, blank=True, unique=False) 
    last_name = models.CharField(max_length=50, null=True, blank=True, unique=False) 
    contact = models.CharField(max_length=50, null=True, blank=True, unique=False) 
    product = models.ForeignKey(Product) 
    def __unicode__(self): 
     return self.first_name 

和我handlers.py

from django.utils.xmlutils import SimplerXMLGenerator 
from piston.handler import BaseHandler 
from booking.models import * 
from piston.utils import rc, require_mime, require_extended, validate 
class BookingHandler(BaseHandler): 
    allowed_method = ('GET', 'POST', 'PUT', 'DELETE') 
    fields = ('id', 'date_select', 'product_name', 'quantity', 'price','totalcost', 'first_name', 'last_name', 'contact', 'product') 
    model = Booking 

    def read(self, request, id): 
     if not self.has_model(): 
      return rc.NOT_IMPLEMENTED 
     try: 
      inst = self.model.objects.get(id=id) 
      return inst 
     except self.model.MultipleObjectsReturned: 
      return rc.DUPLICATE_ENTRY 
     except self.model.DoesNotExist: 
      return rc.NOT_HERE 

    def create(self, request, *args, **kwargs): 
     if not self.has_model(): 
      return rc.NOT_IMPLEMENTED 

     attrs = self.flatten_dict(request.POST) 
     if attrs.has_key('data'): 
      ext_posted_data = SimplerXMLGenerator(request.POST.get('data')) 
      attrs = self.flatten_dict(ext_posted_data) 
     try: 
      inst = self.model.objects.get(**attrs) 
      return rc.DUPLICATE_ENTRY 
     except self.model.DoesNotExist: 
      inst = self.model(**attrs)#error?? 
      inst.save() 
      return inst 
     except self.model.MultipleObjectsReturned: 
      return rc.DUPLICATE_ENTR 

沒有人可以給我一隻手我的情況?

在此先感謝...

回答

6

您指定的產品作爲

product = qa.id 

雖然你應該做的

product = qa 
5
product = qa 

使用ForeingKey你應該assing的對象,而不是ID 。

+0

爲什麼?這麼奇怪! – rom

+0

,因爲你可以用'sd.product'來引用它,你將得到一個完整的Product對象 – user1040495