我在 Django 中遇到了数据库查询问题。
我的数据库(models.py):
class Food(models.Model):
name = models.CharField(max_length=200)
...
class Combination(models.Model):
food1 = models.ForeignKey(Food, related_name='food1')
food2 = models.ForeignKey(Food, related_name='food2')
...
食物的组合顺序对我的问题无关紧要。
此外,每个组合可以存在多次(并且在两个方向上)。
例如 food1="chocolate" & food2="fruit" 与 food2="chocolate" & food1="fruit" 相同
,两种组合都存在多次。
如果我想找到包括特定食物(由 food_id 标识)在内的所有组合,
我目前正在求助于以下查询:
combinations1 = Combination.objects.filter(food1=food_id).values_list('food2')
combinations2 = Combination.objects.filter(food2=food_id).values_list('food1')
它可以工作,但以后需要更多处理。我尝试将 Q 对象与 OR 一起使用,但我没有成功,因为提取的列取决于过滤器......
我知道这个解决方案远非优雅。我应该使用自定义字段还是 CommaSeparatedIntegerField 而不是组合中的两个单独的食物字段?有没有办法通过一个 DB Hit 获取所有请求的值(来自两列)?
谢谢你的协助!
干杯,
奥利弗