【问题标题】:Cannot resolve keyword 'some_field' into field. Choices are:无法将关键字“some_field”解析为字段。选择是:
【发布时间】:2020-09-29 11:56:36
【问题描述】:

我正在按相关模型过滤模型,但我遇到了问题标题中指定的一些错误。

无法将关键字“bmodel”解析为字段。选项有:标题, 描述、编号、client_user_id、assignee_id

模型是这样的:

第一个模型

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)

第二个模型

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

我该如何解决这个问题?有人可以帮忙吗?提前致谢!

【问题讨论】:

    标签: python-3.x django django-models django-views


    【解决方案1】:

    这条线是错误的。您正在分配与BModel 相关的a_model

    amodel = models.ForeignKey("AModel", related_name="a_model", on_delete=DO_NOTHING)
    

    您需要将其更改为:

    amodel = models.ForeignKey("AModel", related_name="bmodel", on_delete=DO_NOTHING)
    

    您的查询应该可以工作。

    【讨论】:

    • 没有。现在 int 对象不可迭代,为什么我不知道
    • 因为__in 过滤器需要传递iterable 而你传递的只是一个int。您需要将查询更改为a_model__user_id=current_user 或确保current_user 是一个列表。
    • 是的,我做了,但只有一个结果,但我还有更多。为此我该怎么办?
    • 我不明白这个问题。您希望在哪里看到更多结果?您可以使用__in 过滤器为更多用户过滤结果。
    • ok 还有更多与id为2的用户相关的AModel结果
    【解决方案2】:

    您可能正在尝试这样的事情。你取自属性名.filter()获取相关模型时不要与related_name混淆:

    def get_queryset(self):
        current_user = 2
        qs = super().get_queryset()
        qs = qs.filter(client_user__user_id__in=current_user)
        return qs
    

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2021-09-17
      • 2017-11-08
      • 2016-05-10
      • 1970-01-01
      • 2018-11-23
      • 2011-06-09
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多