在Django中使用Through查询ManytoMany字段
发布时间:2020-12-16 22:59:37 所属栏目:Python 来源:网络整理
导读:我在Django中有一个类似的模型: class Classification(models.Model): name = models.CharField(choices=class_choices) ...class Activity(models.Model): name = models.CharField(max_length=300) fee = models.ManyToManyField(Classification,through=
我在Django中有一个类似的模型:
class Classification(models.Model): name = models.CharField(choices=class_choices) ... class Activity(models.Model): name = models.CharField(max_length=300) fee = models.ManyToManyField(Classification,through='Fee') ... class Fee(models.Model): activity = models.ForeignKey(Activity) class = models.ForeignKey(Classification) early_fee = models.IntegerField(decimal_places=2,max_digits=10) regular_fee = models.IntegerField(decimal_places=2,max_digits=10) 这个想法是每个活动和分类对都会有一系列费用.分类就像学生,员工等. 我知道那部分是正确的. 然后在我的应用程序中,我查询一组活动: activities = Activity.objects.filter(...) 返回活动列表.我需要在我的模板中显示活动列表及其费用.像这样的东西: Activity Name Student Early Price - $4 Student Regular Price - $5 Staff Early Price - $6 Staff Regular Price - $8 但是,如果没有针对每个活动/类对的Fees对象的特定获取查询,我不知道获取此信息的简单方法. 我希望这会奏效: activity.fee.all() 但这只是返回分类对象.有没有办法通过我已经查询的活动获得对的费用对象数据? 或者我这样做完全错了? 解决方法
考虑到michuk的提示将“费用”重命名为“分类”:
活动模型上费用对象的默认名称将为fee_set.所以为了得到你的价格,这样做: for a in Activity.objects.all(): a.fee_set.all() #gets you all fees for activity 但有一件事,因为你可以看到你最终会在每个活动对象上进行1次SELECT以获取费用,有些应用程序可以提供帮助,例如,django-batch-select在这种情况下只进行2次查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |