gpt4 book ai didi

python - 如何用抽象模型定义外键关系?

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:31 26 4
gpt4 key购买 nike

有这个代码:

class Part:
name = models.CharField(
_("Name of part"),
max_length=255,
help_text=_("Name of the part.")

class Meta:
verbose_name = _("Part")
verbose_name_plural = _("Parts")
abstract = True


class Book(Part):
isbn = models.CharField(
help_text=_("The ISBN of the book"),
max_length=15
)

对于我的模型。下一步我需要链接到基本对象。使用此代码完成:

class StorageItem(models.Model):
part = models.ForeignKey(
Part,
help_text=_("The part stored at this spot.")
)

我收到此错误消息:

ERRORS: StorageItem.part: (fields.E300) Field defines a relation with model 'Part', which is either not installed, or is abstract.

将对象链接到一组全部派生自一个基类的不同类的正确方法是什么?

最佳答案

遗憾的是,无法将 ForeignKeys 添加到抽象模型中。解决此限制的一种方法是使用 GenericForeignKey:

class StorageItem(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')

然后您可以按如下方式使用 GenericForeignKey:

book = Book.objects.create(name='test', isbn='-')
item = StorageItem(content_object=book)
item.save()
item.content_object # <Book>

对其工作原理的快速解释:

  • content_type 存储通用外键指向的模型
  • object_id 存储模型的 id
  • content_object 是直接访问链接的外键对象的快捷方式

文档提供了有关如何使用此 https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/#generic-relations 的附加信息

编辑

经过进一步研究,它看起来像 django_polymorphic也可以做你想做的事。

关于python - 如何用抽象模型定义外键关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com