I’ve run into a problem that I just can’t figure out. I hope someone can help. I have the following models and I’m simply trying to create a one-to-one object and save it, but I get the following error.
ValueError: Cannot assign "(<OrderBox: testsku>,)": "Shipping.order_box" must be a "OrderBox" instance.
Models.py
class OrderBox(models.Model):
order = models.ForeignKey(Order, related_name='order_boxes', on_delete=models.CASCADE)
sku = models.CharField(max_length=10)
name = models.CharField(max_length=100)
length = models.PositiveSmallIntegerField(default=1)
width = models.PositiveSmallIntegerField(default=1)
height = models.PositiveSmallIntegerField(default=1)
index = models.PositiveSmallIntegerField(default=1)
def __str__(self):
return self.sku
class Shipping(models.Model):
order_box = models.OneToOneField(OrderBox, related_name='shipping_order', on_delete=models.CASCADE)
order_no = models.CharField(max_length=20)
order_id = models.CharField(max_length=20)
order_key = models.CharField(max_length=50)
ship_date = models.DateField()
def __str__(self):
return self.order_no
But when I run the following code in my views file I get the error below. But I’m clearly supplying it an OrderBox instance.
def generate_shipping_label(request, order_pk):
ob = OrderBox(
order = Order.objects.get(pk=order_pk),
sku = "testsku",
name = "testname"
)
ob.save()
print(ob.pk, type(ob))
shipping = Shipping()
shipping.order_box = ob,
shipping.order_no = "12345",
shipping.order_id = "2",
shipping.order_key = "3",
shipping.ship_date = date.today() + timedelta(days=1)
shipping.save()
Traceback
40 <class 'orders.models.OrderBox'>
Internal Server Error: /orders/shipping-label/22515
Traceback (most recent call last):
File "c:\Users\antho\Documents\Business\Projects\Django Projects\mms_env\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "c:\Users\antho\Documents\Business\Projects\Django Projects\mms_env\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Program Files\Python310\lib\contextlib.py", line 79, in inner
return func(*args, **kwds)
File "C:\Users\antho\Documents\Business\Projects\Django Projects\MMS\mms-master-data\orders\views\order_processing.py", line 852, in generate_shipping_label
shipping.order_box = ob,
File "c:\Users\antho\Documents\Business\Projects\Django Projects\mms_env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 369, in __set__
super().__set__(instance, value)
File "c:\Users\antho\Documents\Business\Projects\Django Projects\mms_env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 266, in __set__
raise ValueError(
ValueError: Cannot assign "(<OrderBox: testsku>,)": "Shipping.order_box" must be a "OrderBox" instance.
I can duplicate this in the python shell and it works, but in my views it keeps throwing this error.
If it matters I’m using Django 4.2 with a Postgres database.