gpt4 book ai didi

python - 多表子类模型的管理通用内联被破坏了---有什么选择吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:58 40 4
gpt4 key购买 nike

这是我正在尝试做的,但失败了...

我有一个文件模型,它与其他对象具有通用关系:

class File(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
file = models.FileField(upload_to='files/%Y/%m/%d')
# etc....

我还想有一个 File 的子类来处理要在页面中显示而不是下载的图像的特定情况:

class Image(File):
file = models.ImageField(upload_to='files/%Y/%m/%d')

以上所有工作正常,包括 File 模型的通用内联,直到我想使用 Image 模型的通用内联 --- 保存过程无法创建基类实例,因此引发错误说明Image.file_ptr(基类的“ secret ”外键)不能为 None。

因此,基本上,通用内联目前不能正确支持多表继承。

很可能我把它弄得比实际需要的更复杂,所以任何人都可以建议解决这个问题,或者更好的方法来达到同样的目的吗?

如果您需要进一步说明,请告诉我。

最佳答案

在关系模型中可以通过两种方式实现继承。

子类可以是一个新表,其中重复了父类(super class)的所有相同列。当您具有抽象父类(super class)或覆盖父类(super class)的子类功能时,这很有效。

子类可以只是与父类(super class)表连接的唯一列。当您有一个具体的父类(super class)时,这很有效。

在您的情况下,看起来您可能具有以下内容。

class FileFacts( models.Model ):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()

class DownloadFile( models.Model ):
facts = models.ForeignKey( FileFacts )
file = models.FileField(upload_to='files/%Y/%m/%d')

class InlineImage( models.Model ):
facts = models.ForeignKey( FileFacts )
file = models.ImageField(upload_to='files/%Y/%m/%d')

这是我处理类子类模型的偏好。

关于python - 多表子类模型的管理通用内联被破坏了---有什么选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311300/

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