Python/Django-间接双向m2m关系?
我有以下代码:Python/Django-间接双向m2m关系?,python,django,Python,Django,我有以下代码: class Reference(models.Model): title = models.CharField(max_length=200, verbose_name = _('title')) def __unicode__(self): return u"%s" % (self.title) class Meta: verbose_name = _('bibliographic reference') verbose_na
class Reference(models.Model):
title = models.CharField(max_length=200, verbose_name = _('title'))
def __unicode__(self):
return u"%s" % (self.title)
class Meta:
verbose_name = _('bibliographic reference')
verbose_name_plural = _('bibliographic references')
class Relation(models.Model):
reference = models.ForeignKey(Reference)
circuit = models.ManyToManyField('Circuit', related_name = 'relation_circuit', verbose_name = _('Circuits'))
def __unicode__(self):
return u"%s " %(self.reference)
class Meta:
verbose_name = _('relation')
verbose_name_plural = _('relations')
class Circuit(models.Model):
name = models.CharField(max_length=200, verbose_name = _('name'))
reference = models.ManyToManyField(Relation, through=Relation.circuit.through, related_name='relation_circuit', verbose_name = _('Bibliographic References'))
def __unicode__(self):
return u"%s" % (self.name)
class Meta:
verbose_name = _('circuit')
verbose_name_plural = _('circuits')
关系在引用中显示为内联。
我需要在我的回路和引用之间创建一个双向关系,但我不知道如何显示所有引用,而只显示那些有关系的引用,因为它们之间存在关系
有人能帮我吗
非常感谢。这将是我的出发点
class Reference(models.Model):
title = models.CharField(max_length=200)
relations = models.ManyToManyField('Relation', related_name="reference_relations", null=True, blank=True)
def __unicode__(self):
return u"%s" % (self.title,)
class Relation(models.Model):
reference = models.ForeignKey(Reference)
circuit = models.ForeignKey('Circuit')
def __unicode__(self):
return u"%s <-> %s " %(self.reference, self.circuit)
class Circuit(models.Model):
name = models.CharField(max_length=200)
relations = models.ManyToManyField(Relation, related_name="circuit_relations", null=True, blank=True)
def __unicode__(self):
return u"%s" % (self.name)
当然,您可以在不使用直通表的情况下执行此操作,但我的偏好是保持关系简单。我不确定是否完全理解您需要什么,但一个带有foreignKey的表是否足够 差不多
class Reference(models.Model):
title = models.CharField(max_length=200, verbose_name = _('title'))
class Circuit(models.Model):
name = models.CharField(max_length=200, verbose_name = _('name'))
class Relation(models.Model):
reference = models.ForeignKey(Reference)
circuit = models.ForeignKey(Circuit)
然后,您可以通过创建关系实例来链接它们,如下所示:
circuit = Circuit(name="cool_circuit")
reference = Reference(title="cool_reference")
relation = Relation(reference=reference, circuit=circuit)
也很容易将所有参考链接到某个电路
circuit = Circuit.objects.get(id=1)
references_linked_to_circuit_1 = Reference.objects.filter(relation__circuit=circuit)
对于所有连接到参考的电路也是如此
reference = Circuit.objects.get(id=1)
circuits_linked_to_reference_1 = Reference.objects.filter(relation__reference=reference)
有什么理由不能使用直通表吗?就像这样?至少可以说这个代码很奇怪。你能用自己的话描述一下你真正想要达到的目标吗?如果你画ERD,那会更有帮助。我想不会。我发布的解决方案使用的是贯穿表,但当我在回路中时,我只能看到那些具有关系的引用,而不是我引用模型中的所有引用。也许我可以用另一种方式定义直通表,但我不知道如何定义。有什么想法吗一方面,我有电路和其他变量之间具有不同关系的引用。另一方面,我有几个信息电路,包括它的参考。一个电路可能与不同的参考相关,一个参考也可能与不同的电路相关。当我想为我的电路添加另一个参考时,我只能在那些有关系的参考之间进行选择。但是,一个参考人不可能有任何关系。当参考和电路之间存在关系时,我怎样才能在它们之间创建一个双向关系呢?我想你们把事情搞糊涂了。。。您只需要在电路模型上引用一个ManyToMany,并将关系作为through表,但如果要向through模型添加更多字段,则只需要一个显式through表,而这些字段目前未显示在代码中
reference = Circuit.objects.get(id=1)
circuits_linked_to_reference_1 = Reference.objects.filter(relation__reference=reference)