Не удается разрешить ключевое слово ‘some_field’ в поле. Варианты:

#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