我已经对这个问题进行了大量的搜索,并且经历了一系列关于Stack Overflow的相关问题,但似乎没有关于如何通过"中间模型"实现多对多关系的明确答案(或者可能我错过了它).
我有一个名为Sample的模型,它与Region有多对多的关系.有一个连接两者的中间模型,名为SampleRegion.我目前没有保存关于中间模型的任何额外信息,但我可能在将来.
这是我的模特:
class Sample(models.Model):
sample_id = models.BigIntegerField(primary_key=True)
description = models.TextField(blank=True)
objects = models.GeoManager()
regions = ManyToManyField(Region, through='SampleRegion')
class Meta:
db_table = u'samples'
def save(self, **kwargs):
# Assign a sample ID only for create requests
if self.sample_id is None:
try: id = Sample.objects.latest('sample_id').sample_id + 1
except Sample.DoesNotExist: id = 1
self.sample_id = id
super(Sample, self).save
class Region(models.Model):
name = models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.name
class Meta:
db_table = u'regions'
class SampleRegion(models.Model):
sample = models.ForeignKey('Sample')
region = models.ForeignKey(Region)
class …Run Code Online (Sandbox Code Playgroud)