在一个模型中分配Django模型字段以指向其他相关模型中的一个

时间:2017-06-03 00:05:19

标签: python django django-models

我正在为Django设计一个服务公司的检查应用程序,并且对我的模型有一个深奥的问题。这就是我挣扎的场景:

Site(models.Model):
    name = CharField()

Generator(models.Model):
    number = CharField()
    site = ForeignKey(Site)

Pump(models.Model):
    number = CharField()
    site = ForeignKey(Site)

Jobs(models.Model):
    asset = ?
    site = ForeignKey(Site)

我想要做的是将Generator或Pump对象分配给Jobs中的资产字段。我不希望生成生成器和泵号的列表,而是希望该字段指向实际模型本身,这样我可以向后引用每个作业而不扫描两个表。

有什么想法吗?在工作模型中拥有资产属性会有所帮助吗?我在想这个吗?

使用Django 1.11.1和Python 3.6

1 个答案:

答案 0 :(得分:0)

您可以使用documentation

中显示的通用外键

因为这是一个单行的答案。为了扩展它:

from django.db import models
from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Asset(models.Model):

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    ...

class Job(models.Model):

    assets = GenericRelation(Asset)
    ...