ValueError: cannot be assigned in django

I had a problem when I was trying to add / publish data in my models. this is what i did in my python manage.py shell:

>>> 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. 

I don’t know why this is happening ... is this product = qa.id not equal to Booking.product?

here is my 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 

and my 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 

can someone give me a hand about my situation?

thanks in advance...

+4
source share
2 answers

You assign the product as

 product = qa.id 

While you have to do

 product = qa 
+6
source
 product = qa 

Using ForeingKey , you should define an object, not an identifier.

+5
source

Source: https://habr.com/ru/post/1383584/


All Articles