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)