您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django中使用Through查询ManytoMany字段

5b51 2022/1/14 8:22:12 python 字数 2922 阅读 521 来源 www.jb51.cc/python

我在Django中有一个类似的模型: class Classification(models.Model): name = models.CharField(choices=class_choices) ... class Activity(models.Model): name = models.CharField(max_length=300) fee = models.Ma

概述

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()

但这只是返回分类对象.有没有办法通过我已经查询的活动获得对的费用对象数据?

或者我这样做完全错了?

活动模型上费用对象的名称将为fee_set.所以为了得到你的价格,这样做:

for a in Activity.objects.all():
    a.fee_set.all() #gets you all fees for activity

但有一件事,因为你可以看到你最终会在每个活动对象上进行1次SELECT以获取费用,有些应用程序可以提供帮助,例如,django-batch-select在这种情况下只进行2次查询.

总结

以上是编程之家为你收集整理的在Django中使用Through查询ManytoMany字段全部内容,希望文章能够帮你解决在Django中使用Through查询ManytoMany字段所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶