Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:在众多关系中突出主要/喜爱关系的最佳方式_Django_Django Models_Foreign Keys_Many To Many - Fatal编程技术网

Django:在众多关系中突出主要/喜爱关系的最佳方式

Django:在众多关系中突出主要/喜爱关系的最佳方式,django,django-models,foreign-keys,many-to-many,Django,Django Models,Foreign Keys,Many To Many,在django的众多关系中,突出显示特定关系的最佳方式是什么 例如,如果我想突出显示基因数据库中对基因的主要或“最佳”引用,我目前的策略(似乎有点错误和重复)是在多个字段之外使用外键: from django.db import models class Gene(models.Model): name = models.CharField() primary_reference = models.ForeignKey(Reference) other_referenc

在django的众多关系中,突出显示特定关系的最佳方式是什么

例如,如果我想突出显示基因数据库中对基因的主要或“最佳”引用,我目前的策略(似乎有点错误和重复)是在多个字段之外使用外键:

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
。。。(相反,我需要连接
主\u引用
其他\u引用

另一方面,如果我只做一个ManyToManyField

class Gene(models.Model):
    name = models.CharField()
    referencess = models.ManyToManyField(Reference)  # includes primary
获取诸如
基因.primary\u reference
(反之,
基因.other\u reference
,不包括primary)之类内容的最佳方法是什么

我想在参考模型中有一个额外的字段,类似于“主要参考”的布尔值。。。但这不起作用,因为作为我案例的补充说明:一个给定的引用可以引用许多基因,而只是其中一个引用基因的主要引用


我还应该指出,在这种情况下,确定“主要”引用的标准不是可以从引用模型中的信息(例如,发布日期)计算出来的内容。

如何设置它很好,我唯一要更改的是有两个字段:
引用
(对于所有引用)和
主要参考
。例如:

class Gene(models.Model):
    name = models.CharField()
    primary_reference = models.ForeignKey(Reference, related_name="primary_reference")
    references = models.ManyToManyField(Reference)

class Reference(models.Model):
    year = models.CharField()
    author = models.CharField()
如果只想查询非主引用,则可以构造如下查询:

 gene.references.exclude(id=gene.primary_reference_id)

如果可以有多个
primary\u reference
,那么您需要使用来添加关系本身的“元数据”。

primary\u reference是否应该像代码示例中那样是一个单数ForeignKey?如果是这样的话,您在这里看到的是好的,如果您只查找非主要引用,那么排除单个引用应该不会太难。如果存在多个主要参考文献的可能性,那么这是一个不同的问题(通过
related\u to
回答)。是的,只有一个主要参考文献。因此,将一个外键和多个关系放在同一个模型上并不被认为是不好的做法?获取所有引用的最佳方法是像
@property def all_references:
?就我个人而言,我会让
多个
指向所有引用,包括主引用。如果您只需要非主要引用,那么您可以构造如下查询:
gene.references.exclude(id=gene.primary\u reference\u id)
谢谢您的帮助@迈克尔伯:考虑写一个答案,也许有一点细节,并得到你应得的荣誉。如果我可以问一个相关的问题:如果基因->而是一个OneToMany参考(每一个参考提到一个和只有一个基因)呢?这会造成一种外键相互作用的局面。。。其中
class-Gene
有一个
ForeignKey(Reference)
class-Reference
有一个
ForeignKey(Gene)
。。。可以接受吗?有更好的策略吗?