【发布时间】:2017-11-15 12:16:28
【问题描述】:
我正在尝试根据 topCategory 和 middleCategory 的外键主键保存项目。
models.py
class MiddleCategory(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField()
def __str__(self):
return self.title
class TopCategory(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField()
middleCategory = models.ManyToManyField(MiddleCategory)
def __str__(self):
return self.title
# Item
class Product(models.Model):
title = models.CharField(max_length=500, db_index=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
brand = models.CharField(max_length=100)
# brand_id = models.IntegerField()
retailer = models.CharField(max_length=255)
image = models.CharField(max_length=1000)
url = models.URLField(max_length=800, unique=True, default='')
model_numbers = models.BigIntegerField(default=0)
description = models.CharField(max_length=500)
featured = models.CharField(max_length=255, db_index=True, default='NO')
timestamp = models.DateTimeField(auto_now=True)
topCategory = models.ForeignKey(TopCategory)
middleCategory = models.ForeignKey(MiddleCategory)
def __str__(self):
return self.title
在我的脚本中,我是这样保存的:
Product(title=title,
price=price,
brand=brand,
retailer=retailer,
image=image,
url=url,
description=description,
midCategory=midCategory,
topCategory=topCategory
).save()
这是我得到的错误:
ValueError:无法分配“'1'”:“Product.topCategory”必须是“TopCategory”实例。
【问题讨论】:
-
你能打印什么是 topCategory 吗?
-
是的,它是一个整数“1”。我检查了我的 TopCategory 类的主键,并且有一个“1”。
-
错误似乎很明显;您需要 TopCategory 的实际实例,而不是它的主键。
-
我也在 shell 中测试过这个。我尝试了以下方法:topCategory='Computing' & topCategory=1。都不行。
-
这可能是因为 TopCategory 有一个“ManyToMany”字段吗?
标签: python django django-models orm