Ссылка на внешний ключ в Django Python
Как присвоить продукт в ProductInStore экземпляру продукта, который уже есть в магазине? В основном у меня есть скраппер и я перебираю все продукты и мне нужно сначала создать экземпляр Product, а затем экземпляр ProductInStore, который связан с Product через foreignKey. И когда я пытаюсь вставить ProductInStore(product=id), то есть как я хочу ссылаться на этот продукт, я получаю ошибку ValueError: Cannot assign "11393": "ProductInStore.product" должен быть экземпляром "Product". У вас есть идеи, как на него сослаться?
class Product(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True, null=False, editable=False)
created_at = models.DateTimeField(editable=False, default=timezone.now)
updated_at = models.DateTimeField(default=timezone.now)
product_category = models.ManyToManyField(EcommerceProductCategory)
description = RichTextField(max_length=2000, null=True, blank=True)
product_producer = models.ForeignKey('ProductProducer', on_delete=models.CASCADE)
creator = models.ForeignKey('users.CustomUser', on_delete=models.CASCADE, null=True, blank=True, related_name='product_creator')
points_from_reviews = models.DecimalField(max_digits=6, decimal_places=2, default=0, help_text='Średnia ocena produktu')
unique_id = models.CharField(max_length=256, unique=True)
type_of_unique_id = models.CharField(max_length=64)
class ProductInStore(models.Model):
product = models.ForeignKey('Product', on_delete=models.CASCADE)
store = models.ForeignKey('Store', on_delete=models.CASCADE)
price = models.DecimalField(max_digits=6, decimal_places=2, default=0, help_text='Cena w sklepie')
currency = models.CharField(max_length=4)
url = models.CharField(max_length=200)
created_at = models.DateTimeField(editable=False, default=timezone.now)
updated_at = models.DateTimeField(default=timezone.now)
# ADD TO DATABASE
try:
db_product = Product.objects.create(name=name, slug=slug, product_producer_id=3, unique_id=id,
description=description)
db_product.product_category.set(parsed_categories)
except:
print('product already in database')
ProductInStore.objects.create(product=,store=1,price=price,currency='PLN',url=url)
Вы можете просто сделать следующее:
ProductInStore.objects.create(product_id=id, store=1, price=price, currency='PLN', url=url)
Вам не нужно передавать объект, если у вас есть его ID, просто добавьте _id
к имени поля, и вы сможете ссылаться на внешний ключ таким образом.