objects.filter by User фильтрует данные только для одного пользователя - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу отфильтровать данные из модели, используя пользовательский 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)

и набор запросов просмотра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).Что случилось?Как показать только релевантные данные для пользователя?

propreties API response:

"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 голосов
/ 29 апреля 2019

Если вы столкнулись с проблемой, подобной этой, проверьте, что вы установили в settings.py 'rest_framework.authentication.SessionAuthentication

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...