python - django:在 Drinkdatabase 中按成分搜索
问题描述
我想创建一个 Django 过滤器,用于查找饮料中包含的成分。但是,可能没有其他成分存在,只有我输入的那些。
例子:
- 饮品:Gin Tonic
成分:Gin, Tonic - 饮品:威士忌可乐
成分:威士忌可乐 - 饮品:朗姆酒可乐
成分:朗姆酒、可乐
我承认我有可乐、杜松子酒和滋补品。
以下饮料应该回来:
- 杜松子酒补品
朗姆可乐不会回来,因为我没有朗姆酒。
我怎么能在 Django 中做到这一点?我有一个名为 TankAllocation 的数据库。我在那里输入每个罐的成分。
我尝试使用 Django 过滤器,但我没有得到正确的饮料。
也许我可以比较成分表和坦克表的成分的查询集并删除重复的条目,然后使用以下命令开始一个不相等的查询: from django.db.models import Q。但是如何删除查询集中的重复条目?对于新的过滤器查询,这两个条目都应该被删除。
模型.py
from django.db import models
class Drink(models.Model):
name = models.CharField(max_length=256, unique=True)
description = models.TextField()
image_path = models.ImageField(upload_to=".\images")
slug = models.SlugField(unique=True)
ingredient = models.ManyToManyField('Ingredient', through='IngredientRatio', related_name='mischung',)
def __str__(self):
return self.name
class Ingredient(models.Model):
name = models.CharField(max_length=256, unique=True)
alcohol = models.BooleanField()
def __str__(self):
return self.name
class IngredientRatio(models.Model):
quantity = models.DecimalField(max_digits=4, decimal_places=2)
ingredient = models.ForeignKey('Ingredient', on_delete=models.CASCADE)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
def __str__(self):
return "{0}: {1} : {2}".format(self.drink.name, self.ingredient.name, self.quantity)
class TankAllocation(models.Model):
name = models.CharField(max_length=8, unique=True)
allocation = models.ForeignKey('Ingredient', on_delete=models.CASCADE, default='NULL', related_name='ingredients')
def __str__(self):
return "{0}: {1}".format(self.allocation.name, self.name)
感谢您的帮助,我是编程新手 :)))
解决方案
我不确定我是否完全理解,但这样的事情应该有效:
ingredients = ['Cola', 'Gin', 'Tonic']
drinks = Drink.objects.filter(ingredient__name__in=ingredients).distinct()
推荐阅读
- javascript - 不使用 Regex 而是循环搜索和替换字符串,如何一次替换多个单词?
- gradle - 如何使用自定义任务作为工件
- python - 使用 python pyodbc 连接到 Docker 容器中的 Sybase 数据库的 utf-8 编码问题
- c# - Win 表单中标签或文本框的 C# 计数
- maven - 将 OptaPlanner 导出为 jar 时出现 ExceptionInInitializerError
- regex - 正则表达式替换方括号之间的字符,但不替换括号之间的字符
- java - Spring boot @ClientEndpoint 不能 @Autowired 我的服务
- ios - UIImageView Asset 在生产iOS13中设置了一条蓝线
- javascript - 使用正则表达式匹配提取数字、点和逗号
- javascript - 如何检查正则表达式是否无限