突出顯示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