Reputation: 156
So I'm trying to add multiple products or order items into a order and I'm using many to many relationship for that but when I try to create that order I get "<Order: Order object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.
error, My code for adding and saving that order is like:
userObject = UserLogin.objects.get(token=finalUserToken).user
objects = OrderItem.objects.filter(user=userObject)
FinalOrder = Order(user=userObject, order_id=another_token)
for orderObject in objects:
FinalOrder.products.add(orderObject.id)
FinalOrder.save()
The error screen is pointing to this line
FinalOrder.products.add(orderObject.id)
I have also tried this
FinalOrder.products.add(orderObject)
but this gives the same result too
models.py
class OrderItem(models.Model):
item_id = models.CharField(max_length=20)
user = models.ForeignKey(User, on_delete=models.CASCADE)
quantity = models.IntegerField()
product = models.ForeignKey(Product, on_delete=models.DO_NOTHING)
def __str__(self):
return self.product.name
class Order(models.Model):
order_id = models.CharField(max_length=20)
user = models.ForeignKey(User, on_delete=models.CASCADE)
products = models.ManyToManyField(OrderItem)
def __str__(self):
return self.user.username
Upvotes: 1
Views: 583
Reputation: 88649
You need to call the save()
method before the loop
userObject = UserLogin.objects.get(token=finalUserToken).user
objects = OrderItem.objects.filter(user=userObject)
FinalOrder = Order(user=userObject, order_id=another_token)
FinalOrder.save() # call the `save()` method here
for orderObject in objects:
FinalOrder.products.add(orderObject.id)
Alternatively, you can commit the usage of for loop
with list-unpacking
userObject = UserLogin.objects.get(token=finalUserToken).user
objects = OrderItem.objects.filter(user=userObject)
FinalOrder = Order(user=userObject, order_id=another_token)
FinalOrder.save()
FinalOrder.products.add(*objects)
Upvotes: 2