【问题标题】:FieldError: Cannot resolve keyword 'is_active' into fieldFieldError:无法将关键字“is_active”解析为字段
【发布时间】:2018-12-20 17:53:30
【问题描述】:

当我执行以下操作时,出现上述错误。

class UserViewSet(generics.ListCreateAPIView):
    """
    A viewset for viewing and editing user instances.
    """
    models = User
    serializer_class = UserSerializer
    queryset = User.objects.filter(is_active=1) # See this  

我的模型确实包含is_active 字段,并且序列化程序有fields = '__all__'

我需要重写get_queryset 方法吗?

编辑:

以下作品。 编辑 not working now.

def get_queryset(self):
    return User.objects.filter(is_active=1)  

def get_queryset(self):
    return self.queryset.filter(is_active=1)  


def get_queryset(self):
    queryset = super(UserViewSet, self).get_queryset()
    return queryset.filter(is_active=1)

三个都说Cannot resolve keyword 'is_active' into field

P.S - 以上三个都尝试了queryset = User.objects.all()in class

Models.py

class User(models.Model):
    id = models.BigIntegerField(primary_key=True)
    login_id = models.CharField(unique=True, max_length=64, blank=True, null=True)
    is_active = models.CharField(max_length=1, blank=True, null=True)
    auth_type = models.ForeignKey(AuthType, models.DO_NOTHING)
    user_type = models.ForeignKey('UserType', models.DO_NOTHING)
    user_org = models.ForeignKey('Organization', models.DO_NOTHING, blank=True, null=True)
    parent = models.ForeignKey('self', models.DO_NOTHING, blank=True, null=True, related_name="childs")
    auth_user_id = models.OneToOneField(AuthUser, models.DO_NOTHING, db_column="auth_user_id", related_name='cpeUser')
    user_create_date = models.DateTimeField(blank=True, null=True)
    user_expiry_date = models.DateTimeField(blank=True, null=True)
    created_by = models.CharField(max_length=64, blank=True, null=True)
    create_date = models.DateTimeField(blank=True, null=True)
    updated_by = models.CharField(max_length=64, blank=True, null=True)
    update_date = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'cpe_user'

【问题讨论】:

  • 如果 is_active 是一个布尔字段,使用 'True' 值而不是 '1'
  • 这也不行。
  • 怪胎,我在这里得到了答案stackoverflow.com/a/35544035/1936024。我的视图集名称和模型名称相同。天真的同事。
  • 仍然收到is_active 错误。即使在get_queryset
  • 您的意思是all() 中的class attributefilter() 中的get_queryset,对吗?只有这样。谢谢。

标签: django-rest-framework django-queryset


【解决方案1】:

尝试将类属性设置为

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()

然后重写get_queryset方法如下:

def get_queryset(self):
    return self.queryset.filter(is_active=1)

希望这会有所帮助!

【讨论】:

  • 不幸的是没有......我也试过queryset = super(UserViewSet, self).get_queryset()。不过,can not resolve is_active into field
  • 顺便说一下,它是generics.ListCreateAPIView 而不是ModelViewSet。让我更新一下我的问题。
  • 然后我怀疑 User 模型有问题。您可以发布您的用户模型代码吗?你确定这是一个 django.contrib.auth 用户模型吗?
  • 请查看 UserModel 的更新问题。这不是AuthUser 模型,它是一个扩展表。
  • 好的,问题在于您的模型字段is_active。您能否确认该行存在于表中并且您已成功运行迁移?而且由于您的is_active 充当布尔字段,您实际上可以继续将其转换为Django Boolean Field。让我知道它是否有效。
猜你喜欢
  • 2018-11-23
  • 2021-05-23
  • 2013-10-09
  • 2019-05-26
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多