我们正在使用Django 1.11(很快就会转向2.0,所以也可以回答这个问题。)
我们正在解决以下问题:
我们有一个包含多个字段的Ticket
模型,其中一些字段为ForeignKey
,其中一些字段为ChoiceField
。
我们有一个Condition
模型,我们希望将其定位到某些Ticket
字段的特定值。如果ForeignKey
中只有Ticket
个字段,我们会使用GenericRelation
(ContentTypes)。但是,ChoiceField
还有“静态”值。
我们的一位同事提出了一个解决方案,即每Condition
我们创建一个隐藏的Ticket
实例,该实例从未在其他任何地方使用,只是用于保存有关ChoiceField
的信息价值 - 然后此Ticket
与Condition
到GenericRelation
相关联。但这听起来真的很糟糕。
我在想许多开发人员必须解决这个问题。如何做到这一点有什么好的方法吗?
谢谢。
编辑:具体型号代码:
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')
(...)