Django与额外字段的多对多关系
发布时间:2020-12-20 13:24:19 所属栏目:Python 来源:网络整理
导读:我正在使用 django-admin构建一个简单的生物数据库接口来填充数据库.我希望使用多对多的关系来对鱼类进行问卷调查(一个调查问卷可以有一个以上的物种,一个物种可以存在于一个以上的问卷中).这两个模型有问题: class Species(models.Model): fish_spp_name =
我正在使用
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个被捕获? 解决方法
定义另一个模型捕获每个catch的信息.给它一个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>] >>> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |