objects.filter按用户过滤仅针对一个用户的数据

时间:2019-04-29 07:48:12

标签: python django serialization

我想使用用户PK(最好的方式是使用会话,但我不知道如何使用它)从模型中过滤数据。

model.py

class Fca(models.Model):
    num_of_agree = models.ForeignKey(Agreement, models.DO_NOTHING, blank=True, null=True)
    uroch = models.TextField(blank=True, null=True)
    num_allot = models.ForeignKey(Allotment, models.DO_NOTHING, blank=True, null=True)
    num_fca = models.CharField(max_length=50, blank=True, null=True)
    ar_fca = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    expl_ar = models.FloatField(blank=True, null=True)
    cel_nazn = models.ForeignKey(ForestPurpose, on_delete=models.DO_NOTHING, verbose_name='task',blank=True, null=True) 
    cat_zas = models.ForeignKey(ForestProtection, on_delete=models.DO_NOTHING, verbose_name='cate',blank=True, null=True ) 
    geom = models.MultiPolygonField(geography=True, null=True, blank=True, verbose_name='ge')
    video_cat = models.TextField(blank=True, null=True)
    user_check = models.ForeignKey(User,on_delete=models.DO_NOTHING, verbose_name='user_id',blank=True, null=True )

    class Meta:
        managed = True
        verbose_name = 'lek'
        verbose_name_plural =  'leks'

所以user_check是一个过滤器。

serializer.py

class FcaSerializer(gis_serializers.GeoFeatureModelSerializer):

    class Meta:
        model = Fca
        geo_field = 'geom'
        fields = ('id','num_of_agree','num_allot','uroch','num_fca','ar_fca',\
       'expl_ar','cel_nazn','cat_zas','geom','video_cat','user_check')

    def create(self, validated_data):
        return Fca.objects.create(**validated_data)

和视图queryset def:

class FcaSet(viewsets.ModelViewSet):
    serializer_class = FcaSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        user = self.request.user.pk
        return Fca.objects.filter(user_check = user)

因此,当我用pk 1登录用户时,应用会显示相关数据(用户拥有pk 1)。 /api/fcaapi/也仅显示相关数据。但是,当我使用其他用户(例如pk 3)时,该应用程序会显示相同的数据(其中用户的pk为1)。怎么了?如何仅显示与用户相关的数据?

属性API响应:

"properties": {
                    "num_of_agree": null,
                    "num_allot": 225,
                    "uroch": null,
                    "num_fca": null,
                    "ar_fca": null,
                    "expl_ar": null,
                    "cel_nazn": 1,
                    "cat_zas": 1,
                    "video_cat": null,
                    "user_check": 1
                }

1 个答案:

答案 0 :(得分:0)

如果遇到这样的问题,请检查您是否在settings.py'rest_framework.authentication.SessionAuthentication中设置