【问题标题】:Django saving to Foreign fieldDjango 保存到外部字段
【发布时间】: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


【解决方案1】:

你可以获得TopCategory的实例

instance = TopCategory.objects.get(id=topCategory)

然后

Product(title=title,
                    price=price,
                    brand=brand,
                    retailer=retailer,
                    image=image, 
                    url=url,
                    description=description, 
                    midCategory=midCategory,
                    topCategory=instance
                    ).save()

【讨论】:

  • 完美,这是工作,我明白现在缺少什么。谢谢
猜你喜欢
  • 2022-10-12
  • 2014-02-26
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2011-12-19
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多