静态和动态内容的Django内容类型

时间:2018-01-11 10:35:24

标签: django django-models

我们正在使用Django 1.11(很快就会转向2.0,所以也可以回答这个问题。)

我们正在解决以下问题:

  1. 我们有一个包含多个字段的Ticket模型,其中一些字段为ForeignKey,其中一些字段为ChoiceField

  2. 我们有一个Condition模型,我们希望将其定位到某些Ticket字段的特定值。如果ForeignKey中只有Ticket个字段,我们会使用GenericRelation(ContentTypes)。但是,ChoiceField还有“静态”值。

  3. 我们的一位同事提出了一个解决方案,即每Condition我们创建一个隐藏的Ticket实例,该实例从未在其他任何地方使用,只是用于保存有关ChoiceField的信息价值 - 然后此TicketConditionGenericRelation相关联。但这听起来真的很糟糕。

    我在想许多开发人员必须解决这个问题。如何做到这一点有什么好的方法吗?

    谢谢。

    编辑:具体型号代码:

    class Ticket(models.Model):
        TYPE_RETURN = 'TYPE_RETURN'
        TYPE_WARRANTY_CLAIM = 'TYPE_WARRANTY_CLAIM'
        TYPES = (
            (TYPE_RETURN, _('Return')),
            (TYPE_WARRANTY_CLAIM, _('Warranty claim'))
        )
        TYPE_DEFAULT = TYPE_RETURN
    
        state = models.ForeignKey(
            to=TicketState,
            verbose_name=_('State'),
            null=True,
            on_delete=models.SET_NULL
        )
    
        type = models.CharField(
            max_length=20,
            choices=TYPES,
            default=TYPE_DEFAULT
        )
    
        (...)
    
    class Condition(models.Model):
        content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
        object_id = models.UUIDField(primary_key=False, editable=True, unique=False, blank=True, null=True)
        content_object = GenericForeignKey('content_type', 'object_id')
    
        (...)
    

0 个答案:

没有答案