QuerySet 不按用户过滤

QuerySet doesn't filter by user

更新: 意识到这可能是由于身份验证过程中的某些错误。这是我的授权:

const LogIn = () => {
  let dispatch = useDispatch();
  const [username, setUsername] = useState("");
  const [password, setPassword] = useState("");
  // const auth = useAuth();
  const history = useHistory();

  const onSubmit = async (e) => {
    e.preventDefault();
    dispatch(startLogin());
axios
  .post(
    "http://127.0.0.1:8000/api/login/",
    { username: username, password: password },
    { headers: { "Content-Type": "application/json" } }
  )
  .then((res) => {
    const users = res.data;
    dispatch(LogInSuccess(users));
    localStorage.setItem("jwt", users.auth_token);
    localStorage.setItem("user", JSON.stringify(users));
    console.log("users", users); // undefined
    history.push("/");
  })
      .catch((err) => dispatch(LogInFailure(err.message)));
  };

所以我的代码是用 Django 后端和 React 前端编写的。

出于某种原因,owner/user 未过滤物体(在本例中为老鼠)。我不想授予权限 - 任何人都应该能够访问其他人的老鼠,但在这个特定列表中,用户应该只能看到属于他们的老鼠。

运行 其他过滤器有效,例如生日。但是当我尝试按用户过滤时,没有老鼠出现。也没有错误。有什么问题吗?

对象序列化器:

class RatSerializer(FlexFieldsModelSerializer):
    user         = serializers.CharField()
    body_colour  = BodyColourSerializer()
    eye_colour   = EyeColourSerializer()
    image        = ImageSerializer()

    class Meta:
        model = rat

观看次数:

   class ratViewset(FlexFieldsMixin):
         serializer_class = RatSerializer
         def get_queryset(self):
            userid = self.request.id
            return rat.objects.filter(user = userid)

用户序列化器:

class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)

class Meta:
    model = User
    fields = ('id', 'username', 'password')

以及用户的 JSON 输出:

{
        "id": 13,
        "username": "new"
    }

在 object/rat 的 JSON 输出中,它清楚地说明了它属于哪个用户。那么为什么过滤器不起作用?

如果您使用: request.user

您的用户未通过身份验证。

因此它将return全部。

确保您已登录并重试

这是解决问题的新 get_query:

def get_queryset(self):
    user = self.request.user
    if user.is_anonymous:
        return rat.objects.all()
    return rat.objects.filter(user=user.id)

基本上我先获取用户,然后按 user.id 筛选。早些时候我试图立即获取 userId 并以此进行过滤。

我所做的另一个更改是将 ModelViewSet 添加到视图集中,但我认为这没有什么不同(?)

编辑:if user.is_anonymous 部分只是为了让用户在未登录时看到所有对象。这仅用于测试目的