我正在使用django-admin构建一个简单的生物数据库接口来填充数据库。我希望使用多对多的关系来对鱼类进行问卷调查(一个调查问卷可以有一个以上的物种,一个物种可以存在于一个以上的问卷中)。这两个模型有问题:
class Species(models.Model):
fish_spp_name = models.CharField(max_length=255, unique=True)
class Questionaire(models.Model):
# ...
fish_caught = models.ManyToManyField(Species)
现在,我希望我的数据包含每个调查问卷中捕获的每个物种的数量。因此,举例来说,我可以将3个不同的物种与问卷id = 1联系起来,但我如何将其包括在内,例如第一个物种中的2个,第二个中的1个和第三个中的4个被捕获?
答案 0 :(得分:4)
答案 1 :(得分:-3)
定义另一个模型Caught
以保存每个捕获的信息。给它一个related_name
,以便在代码中更容易引用。您可能还需要unique_together
个适当的字段。
class Species(models.Model):
name = models.CharField(max_length=255, unique=True)
def __unicode__(self):
return '%s/%d' % self.name
class Questionaire(models.Model):
pass
class Caught(models.Model):
species = models.ForeignKey(Species)
number = models.IntegerField()
questionaire = models.ForeignKey(
Questionaire, related_name='catches')
def __unicode__(self):
return '%s/%d' % (self.species.name, self.number)
像这样使用:
(InteractiveConsole)
>>> from app.models import *
>>> s1 = Species(name='Salmon')
>>> s1.save()
>>> s2 = Species(name='Mackerel')
>>> s2.save()
>>> q = Questionaire()
>>> q.save()
>>> c1 = Caught(species=s1, number=7, questionaire=q)
>>> c2 = Caught(species=s2, number=5, questionaire=q)
>>> c1.save()
>>> c2.save()
>>> q.catches.all()
[<Caught: Salmon/7>, <Caught: Mackerel/5>]
>>>