【发布时间】:2022-01-26 04:21:45
【问题描述】:
首先,我不是 ENG 的本地人,所以请耐心等待我的 ENG 技能或给我一些建议。
(仅供参考,Django 版本 3.2.9 和 DRF 版本 3.12.4 和 postgres 版本 12.7)
我正在编写使用 drf 序列化程序创建帖子的 API。而且我一直面临“添加到帖子的标签顺序”的问题。
- post 和 tag 模型通过 M2M 字段连接
这意味着,假设我在帖子上添加标签 a、b 和 c。我使用的逻辑如下。
# class Serializer
# def create(instance):
# instance : specific post instance
tags = ['t', 'a', 'g', 's']
Tag.objects.bulk_create([Tag(name = tag) for tag in tags])
instance.tags.add(*[tag for tag in Tag.objects.filter(name__in = tags)])
首先运行它。标签按此顺序添加
TagQuerySet[Tag<'t'>, Tag<'a'>, Tag<'g'>, Tag<'s'>]
而我的 API 接受另一个创建请求,其中包含现有喜欢的标签,
tags = ['g', 'a', 's']
django add 按排序的顺序,而不是我想要的顺序,
# tags new created instance
TagQuerySet[Tag<'a'>, Tag<'g'>, Tag<'s'>]
我知道使用 for 循环按照我的列表顺序添加标签的方法
for tag in tags:
instance.tags.add(Tag.objects.get(name=tag))
但效率不高。
所以我的问题是
- 如何按照我的列表顺序使用
.filter获取查询集。 - 如果没有办法。给帖子添加标签的有效方法是什么
【问题讨论】:
标签: django filter django-rest-framework orm m2m