【问题标题】:(fields.E300) Field defines a relation with model 'Product', which is either not installed, or is abstract Django(fields.E300) 字段定义了与模型“产品”的关系,该模型要么未安装,要么是抽象的 Django
【发布时间】:2022-01-25 12:46:40
【问题描述】:

我是 django 新手,当我想定义两个相互具有外键的模型时遇到了以下错误。我搜索了一下,发现当模型在两个不同的应用程序中时可能会发生这种情况,但我的模型在一个应用程序中。你能帮我解决这个问题吗? 谢谢

错误: ?[31;1mstore.Collection.featured_product: (fields.E300) 字段定义了与模型“产品”的关系,该模型要么未安装,要么是抽象的。?[0m

class Collection(models.Model):
    title = models.CharField(max_length=255) 
    featured_product = models.ForeignKey(
        'Product', on_delete=models.SET_NULL, null = True, related_name= '+')


class Product(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField() 
    price = models.DecimalField(max_digits=6, decimal_places=2)
    inventory = models.IntegerField()
    last_update = models.DateTimeField(auto_now=True)
    collection = models.ForeignKey(Collection, on_delete=models.PROTECT)
    promotion = models.ManyToManyField(Promotion)

【问题讨论】:

  • 我遇到了这个错误(fields.E300)字段定义了与模型“产品”的关系,该模型要么未安装,要么是抽象的
  • 为什么不将其更改为多对多,因为两者都是彼此的外键
  • @HusamAlhwadi 好吧,我现在通过了课程,我完全按照老师的做法做了,但是我的代码遇到了错误。

标签: python django django-models


【解决方案1】:

真的我不认为你需要 2 个外键!,只有一个就足够了,因为你可以通过两种方式获取对象..意味着你可以只在一个模型中使用外键,我已经修改了代码供你参考一些细节

class Collection(models.Model):
    title = models.CharField(max_length=255) 


class Product(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField() 
    price = models.DecimalField(max_digits=6, decimal_places=2)
    inventory = models.IntegerField()
    last_update = models.DateTimeField(auto_now=True)
    collection = models.ForeignKey(Collection, on_delete=models.PROTECT, related_name='product')
    promotion = models.ManyToManyField(Promotion)

现在您可以通过(back-word)获取特定收藏的所有产品:

products = collection.product.all()

【讨论】:

  • 感谢您的评论,但不能使用您的建议,因为模型产品是在模型集合之后定义的,所以当我使用它时,代码无法识别产品表,所以它必须在两个括号之间。
  • 不客气,但我真的不认为你需要 2 个外键!只有一个就足够了,因为你可以通过两种方式获取对象..意味着你可以只在一个模型中使用外键,我已经修改了代码供您参考,并提供了一些细节
猜你喜欢
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2020-08-03
  • 1970-01-01
  • 2021-08-17
  • 2018-03-15
相关资源
最近更新 更多