#python-3.x #django #django-models #django-views
#python-3.x #django #django-модели #django-просмотры
Вопрос:
Я фильтрую модель по связанной модели, но я сталкиваюсь с некоторыми ошибками, указанными в названии вопроса.
Не удается разрешить ключевое слово ‘bmodel’ в поле. Варианты: заголовок, описание, номер, client_user_id, присваиваемый идентификатор
Модели такие:
1-я модель
class AModel(BaseModel):
title = models.TextField(null=True, blank=True)
description = models.TextField(null=True)
number = models.CharField(max_length=200)
client_user = models.ForeignKey("User", related_name="client_users", null=True)
assignee = models.ForeignKey("User", related_name="user_assignees", null=True)
2-я модель
class BModel(models.Model):
amodel = models.ForeignKey("AModel", related_name="a_model", on_delete=DO_NOTHING)
user = models.ForeignKey("User", related_name="entity_user")
мой набор запросов
class AModelView(GenericViewSet):
queryset = AModel.objects.all()
serializer_class = AmodelSerializer
def get_queryset(self):
current_user = 2
qs = super().get_queryset()
qs = qs.filter(a_model__user_id__in=current_user)
return qs
Как я могу решить эту проблему? кто-нибудь может помочь, пожалуйста? Заранее спасибо!
Ответ №1:
Эта строка неверна. Вы назначаете a_model
связанные с BModel
amodel = models.ForeignKey("AModel", related_name="a_model", on_delete=DO_NOTHING)
Вам нужно изменить его на:
amodel = models.ForeignKey("AModel", related_name="bmodel", on_delete=DO_NOTHING)
И ваш запрос должен работать.
Комментарии:
1. Нет. теперь объект int не повторяется, почему я не знаю
2. Потому
__in
что фильтр требует передачи итерации, а вы передаете только int . Вам нужно изменить запрос наa_model__user_id=current_user
или убедиться, чтоcurrent_user
это список.3. да, я сделал, но приходит только один результат, но у меня их больше. что мне для этого делать?
4. Я не понимаю вопроса. Где вы ожидаете увидеть больше результатов? Вы можете использовать
__in
filter для фильтрации результатов для большего количества пользователей.5. хорошо, есть еще результаты модели, связанные с пользователем, идентификатор которого равен 2
Ответ №2:
Возможно, вы пытаетесь использовать sthg таким образом. Вы берете из имени атрибута, не путайте с related_name
при получении связанной модели в .filter()
:
def get_queryset(self):
current_user = 2
qs = super().get_queryset()
qs = qs.filter(client_user__user_id__in=current_user)
return qs