특정 사용자의 질문에서만 발견되는 태그를 기반으로 질문을 필터링하는 방법을 만들려고 합니다. 반환되는 QuerySet에 문제가 있습니다.Queryset([질문13, 질문14, 질문13])
. 그래도 언제.별개의()
추가되면 원하는 결과를 반환합니다.QuerySet([질문13, 질문14])
.
두 번째 체인은 왜.필터()
메서드가 QuerySet에 중복 인스턴스를 추가합니까?
class Post(Model):
body= TextField()
date= DateField(default=date.today)
comment= ForeignKey('Comment', on_delete=CASCADE, null=True)
profile= ForeignKey(
'authors.Profile', on_delete=SET_NULL, null=True,
related_name='%(class)ss',
related_query_name="%(class)s"
)
score= GenericRelation(
'Vote', related_query_name="%(class)s"
)
class Meta:
abstract= True
class Question(Post):
title= CharField(max_length=75)
tags= ManyToManyField(
'Tag', related_name="questions", related_query_name="question"
)
objects= Manager()
postings= QuestionSearchManager()
class QuestionSearchManager(Manager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def by_week(self, profile):
today= date.today()
weekago= today -timedelta(days=7)
queryset= self.get_queryset().filter(
date__range=(weekago, today)
).filter(tags__name__in=profile.questions.values_list(
"tags__name", flat=True
))
return queryset
게시물.json
{
"model": "posts.question",
"pk": 13,
"fields": {
"body": "Content of Question 005",
"date": "2022-02-12",
"comment": null,
"profile": 2,
"title": "Question__005",
"tags": [
1,
7
]
}
},
{
"model": "posts.question",
"pk": 14,
"fields": {
"body": "Content of Question 006",
"date": "2022-02-12",
"comment": null,
"profile": 3,
"title": "Question__006",
"tags": [
1,
2
]
}
}
- 답변 # 1
- >를 찾을 수 없습니다.
이것도 잠시 당황스러웠지만,
태그
필터가 여러 태그와 해당 태그의 속성을 참조하는 경우이름
이제 행을 반환할 것입니다.꼬리표
참조독특한
이것을 사용하여 필터링할 때 가장 친한 친구입니다.태그__이름
스타일 쿼리.다대다 관계이기 때문에 이는 해당 관계를 필터링할 때 일반적으로 알고 있어야 하는 사항입니다.
이 질문은 다음과 유사합니다. 논리적 또는 Django의 다대다 쿼리가 중복 결과를 반환합니다.
Django 문서의 이 섹션을 읽고 쿼리가 어떻게 작동하는지 더 잘 알 수 있습니다.