【发布时间】:2017-04-26 15:23:35
【问题描述】:
想不出一个按多对多关系过滤的好方法。
class Scheduler(models.Model):
weekhours = models.ManyToManyField('WeekHour', related_name='schedulers')
def get_active_products_by_weekhour(self,weekhour):
return Product.objects.filter(scheduler__in=WeekHour.objects.get(hour=weekhour).schedulers.all())
class WeekHour(models.Model):
hour = models.PositiveSmallIntegerField(verbose_name='Hour in week (0 - 7*24')
现在假设我有一个数字列表,例如:
hours = [2,4,6]
我想找到一个调度程序,它具有这组精确的WeekHour 对象和这些hour 值。
因此,当且仅当有一些设置了本周时间[WeekHour(hour=2),WeekHour(hour=4),WeekHour(hour=6)] 时,它才会返回调度程序。所以相关的 WeekHours 的数量必须与列表的大小相同。在这种情况下 3.
这可以使用 Django orm 而不是使用循环吗?
编辑:
这个怎么样?
weekhours_set = [Weekhour.objects.get(hour=x) for x in hours]
scheduler = Scheduler.objects.filter(weekhours__exact=weekhours_set)
这会返回:
TypeError: int() 参数必须是字符串或数字,而不是“列表”
【问题讨论】:
标签: python django django-models many-to-many django-orm