【问题标题】:Django Foreign key that could contain objects of different classes可以包含不同类对象的 Django 外键
【发布时间】:2018-03-10 21:31:26
【问题描述】:

有没有办法可以使用外键来引用不同类的对象

例如,这就是我正在做的:

Class discussion(models.Model):
    id_discussion = models.CharField(db_column='id_Discussion', primary_key=True, max_length=100)
    id_worker =   models.ForeignKey('Worker', models.CASCADE, db_column='id_user', blank=True, null=True)
    id_director = models.ForeignKey('Director', models.CASCADE, db_column='id_user', blank=True, null=True)

Class Message(models.Model):
    #some other fields
    id_sender = models.CharField(db_column='id_Sender', max_length=100, blank=True, null=True)
    id_receiver = models.CharField(db_column='id_Receiver', max_length=100, blank=True, null=True)
    id_discussion = models.ForeignKey('discussion', models.CASCADE, db_column='id_Discussion', blank=True, null=True)

我想把 id_receiver 和 id_sender 变成外键,我的问题是发送者可能是“Worker”类或“Director”类的对象。

【问题讨论】:

    标签: python django class django-models foreign-keys


    【解决方案1】:

    是的。你可以使用GenericForeignKey 看这里:

    https://docs.djangoproject.com/en/2.0/ref/contrib/contenttypes/#generic-relations

    注意:这可能非常低效。阅读本文以了解更多信息https://lukeplant.me.uk/blog/posts/avoid-django-genericforeignkey/

    【讨论】:

    • 谢谢! ...我知道 GenericForeignKey 但它们很慢...我正在寻找另一种方法
    • @HammiCloud 在提到的文章中你会找到替代品
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2013-05-27
    • 2017-12-30
    • 2013-05-09
    • 2014-07-10
    • 2010-10-20
    • 2012-10-15
    相关资源
    最近更新 更多