- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 django 新手,我正在尝试在多对多字段中进行查询。我的查询示例:
在我拥有的模型中
class Line(models.Model):
name = models.CharField("Name of line", max_length=50, blank=True)
class Cross(models.Model):
lines = models.ManyToManyField(Line, verbose_name="Lines crossed")
date = models.DateField('Cross Date', null=True, blank=False)
我正在进行搜索,查询所有具有特定线条的十字架。我的意思是搜索框中的查询将如下所示:line_1、line_2、line_3结果将是具有所有线 (line_1, line2, line_3) 的所有十字
不知道过滤条件应该怎样!
all_crosses = Cross.objects.all().filter(???)
查看代码:
def inventory(request):
if request.method == "POST":
if 'btn_search' in request.POST:
if 'search_by_lines' in request.POST:
lines_query = request.POST['search_by_lines']
queried_lines = split_query(lines_query, ',')
query = [Q(lines__name=l) for l in queried_lines]
print(query)
result = Cross.objects.filter(reduce(operator.and_, query))
非常感谢
最佳答案
你应该能够做到:
crosses = Cross.objects.filter(lines__name__in=['line_1', 'line_2', 'line_3'])
对于三个值中的任何一个。如果您要查找所有匹配的值,则需要使用 Q 对象:
from django.db.models import Q
crosses = Cross.objects.filter(
Q(lines__name='line_1') &
Q(lines__name='line_2') &
Q(lines__name='line_3')
)
您至少可以使用另一种方法,即链接过滤器:
Cross.objects.filter(lines__name='line_1')
.filter(lines_name='line_2')
.filter(lines__name='line_3')
如果您需要动态构造 Q
对象,并假设“name”值就是您要发布的值:
import operator
lines = [Q(line__name='{}'.format(line)) for line in request.POST.getlist('lines')]
crosses = Cross.objects.filter(reduce(operator.and_, lines))
<小时/>
事实证明,我完全错了。我尝试了几种不同的方式来查询 Cross 对象,其中lines的值与搜索的所有项目相匹配。 Q
对象、所包含对象数量的计数注释...没有按预期工作。
最后,我最终将 cross.lines
作为列表与发布的值列表进行匹配。
简而言之,我创建的搜索 View 以这种方式匹配:
results = []
posted_lines = []
search_by_lines = 'search_by_lines' in request.POST.keys()
crosses = Cross.objects.all().prefetch_related('lines')
if request.method == 'POST' and search_by_lines:
posted_lines = request.POST.getlist('line')
for cross in crosses:
if list(cross.lines.values_list('name', flat=True)) == posted_lines:
results.append(cross)
return render(request, 'search.html', {'lines': lines, 'results': results,
'posted_lines': posted_lines})
在这种情况下,我可能会做的是在 Cross
模型上添加一列,以保留相关 lines
值的主键的逗号分隔列表,这您可以通过 post_save 信号保持同步。
使用附加字段,您可以直接查询“行”值而无需连接。
关于python - 如何在ManyToManyField中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026793/
我有一个模型,我想在其中为 manytomanyfield 的计数创建排名。只有它需要一个整数字段而不是一个 manytomany 字段。我的投票有问题__lt。 最好的做法是创建一个计算选票的 vo
假设我有两个 Django 应用程序: competitions - 将处理比赛数据 entries - 将处理与让参赛者参加比赛相关的功能 在比赛应用程序中,我有一个代表比赛部分的模型: class
在我的项目中,我有 2 个模型,它们具有相互指向的 ManyToMany 字段。在这种情况下,我有选举和候选人。这个想法是一个选举可以有多个候选人,一个候选人也可以是多个选举的一部分(一个“候选人”只
我正在使用 Django 的 ManyToManyField,当我尝试向其中添加数据时,出现以下错误: Traceback (most recent call last): File "", li
在 django 模型中我需要过滤 ManyToManyField有条件的 STATUS_CHOICES=( ('ACTIVE', 'Active'), ('INACTIVE', 'Inact
我读了documentation about many-to-many relationships和 examples .我找不到关于在何处放置 ManyToManyField 的提示。就我而言,我有
我需要创建一个有一些选项的 manytomany 字段,然后在每个选项旁边有一个额外的字段 我的模型: class Subject(models.Model): name = models.C
我有两个模型,产品和类别以及产品中的多对多字段。 类别在 ProductCreate View 中显示为键。 我需要为类别自定义小部件和字段。 我检查了 Django 源字段和小部件,但没有看到 Ma
我正在尝试在 Django 中使用 ModelForms 将内容添加到我的数据库中,其中包括一个 ManyToManyField。这是我的模型的相关部分: class Category(models.
我想在创建实例时更新字段,我尝试过 signals但对 ManyToManyField 来说似乎很复杂 class MobileCustomer(models.Model): customer
我正在尝试创建一个表示图形节点的模型。 class Node(models.model): ins = models.ManyToManyField("self", null=True, bl
我正在尝试创建一个表示图形节点的模型。 class Node(models.model): ins = models.ManyToManyField("self", null=True, bl
我有带有 M2M 字段的用户配置文件模型 class Account(models.Model): ... friends = models.ManyToManyField('self
我知道我不可能是第一个问这个问题的人,但我找不到答案,所以请不要吃掉我。 如果我有一个模型,其字段是ManyToManyField;我知道我可以在保存之前获取所选对象,但如果所选对象已更改,则这没有帮
我有一个遗留数据库,其中包含文档和作者的表格。第三个表定义了文档和作者之间的有序多对多关系,使用文档和作者的外键以及一个整数来指定给定文档的作者顺序。 使用 Django 1.1.1(或 SVN),有
我有一个这样的结构: 1. 作者 2. 预订 3.作者类型 4. 作者图书类型 一本书可以有多个作者,并且它可以在书中具有以下功能,例如:“作者”,“共同作者”,“部分”,“帮助者”等: class
以下是我的例子: models.py: class Example(models.Model): title = models.CharField(...) description =
Django ManyToManyField 在 HTML 中呈现如下内容: Question 1, Answer 1 Question 1, Answer 2 Que
如标题所述,manytomanyfield 和 through 如何出现在管理站点中? class SchoolClass(models.Model): id = models.AutoFie
我的 Django 项目中有这些模型: class Area(models.Model): name = models.CharField(max_length=100, primary_ke
我是一名优秀的程序员,十分优秀!