突出显示django中的ManyToMany关系中的特定关系的最佳方式是什么?例如,如果我想强调基因数据库中基因的主要或其他“最佳”参考,我目前的策略(似乎有些错误和重复)是除了使用外键ManyToManyField:Django:在ManyToMany关系中突出显示主/关系关系的最佳方式
from django.db import models
class Gene(models.Model):
name = models.CharField()
primary_reference = models.ForeignKey(Reference)
other_references = models.ManyToManyField(Reference) # doesn't include primary
class Reference(models.Model):
year = models.CharField()
author = models.CharField()
这能够完成任务,但现在如果我想获得的所有引用,我不能只是得到gene.references
...(更确切地说,我需要连接primary_references
和other_references
)
另一方面,如果我只是制作一个ManyToManyField字段
class Gene(models.Model):
name = models.CharField()
referencess = models.ManyToManyField(Reference) # includes primary
是什么让像gene.primary_reference
(相反,gene.other_references
,不包括主)的最好方法?
我想在参考模型中有一个额外的字段,其中有一个类似于“主参考”的布尔值......但这不起作用,因为作为我的情况的附加说明:给定的参考可以引用多个多个基因,同时仅作为其参考基因的一个的主要参考。
我还应该指出,在这种情况下确定“主要”参考的标准并不是可以从参考模型中的信息计算出来的(例如发布日期等)。
primary_reference是否应该是一个单一的ForeignKey,就像你在代码示例中一样?如果是这样,你在这里有什么是好的,如果你只是寻找非主要引用,排除单个引用不应该太难。如果有多个主要参考的可能性,那么这是一个不同的问题(通过'related_through'回答)。 – michaelb 2014-10-01 00:09:33
是的,只会有一个primary_reference。因此,将ForeignKey和ManyToMany关系同一个模型不认为是不好的做法?最好的方式来得到所有的参考文件是 '@property def all_references:'? – tlambert 2014-10-01 00:12:58
就我个人而言,我有'ManyToMany'指向所有引用,包括主要引用。如果你只想*非主要引用,那么你可以像这样构造一个查询:'gene.references.exclude(id = gene.primary_reference_id)' – michaelb 2014-10-01 00:25:48