lov*_*ing 6 django many-to-many django-models
我在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)
Run Code Online (Sandbox Code Playgroud)
这个想法是每个活动和分类对都会有一系列费用.分类就像学生,员工等.
我知道那部分是正确的.
然后在我的应用程序中,我查询一组活动:
activities = Activity.objects.filter(...)
Run Code Online (Sandbox Code Playgroud)
返回活动列表.我需要在我的模板中显示活动列表及其费用.像这样的东西:
Activity Name
Student Early Price - $4
Student Regular Price - $5
Staff Early Price - $6
Staff Regular Price - $8
Run Code Online (Sandbox Code Playgroud)
但是,如果没有针对每个活动/类对的Fees对象的特定获取查询,我不知道获取此信息的简单方法.
我希望这会奏效:
activity.fee.all()
Run Code Online (Sandbox Code Playgroud)
但这只是返回分类对象.有没有办法通过我已经查询的活动获得对的费用对象数据?
或者我这样做完全错了?
考虑到michuk的提示将"费用"重命名为"分类":
活动模型上费用对象的默认名称将为fee_set.所以为了得到你的价格,这样做:
for a in Activity.objects.all():
a.fee_set.all() #gets you all fees for activity
Run Code Online (Sandbox Code Playgroud)
但有一件事,因为你可以看到你最终会在每个活动对象上进行1次SELECT以获取费用,有些应用程序可以提供帮助,例如,django-batch-select在这种情况下只执行2次查询.
| 归档时间: |
|
| 查看次数: |
5080 次 |
| 最近记录: |