Django Набор запросов поля внешнего ключа сериализатора Rest Framework на основе пользователя - PullRequest
0 голосов
/ 07 мая 2020

Предположим, у меня есть эти модели:

class Department(Model):
    ...

class Building(Model):
    department = ForeignKey(Department, on_delete=CASCASE, related_name='buildings')
    staff = ManyToManyField(User)

и у меня есть 2 сериализатора для этих моделей

class DepartmentSerializer(ModelSerializer):
    class Meta:
        model = Department
        # how do I change this list of buildings accordingly to the user making the request?
        fields = (..., 'buildings') 

class BuildingSerializer(ModelSerializer):
    class Meta:
        model = Buiding
        fields = '__all__'

Я хочу, чтобы когда пользователь запрашивал Department, например, через ViewSet, возвращается JSON данных от сериализатора, но поле buildings содержит только здания, в которых работает пользователь. Так, например, user 'alice' и 'bob' оба работают в отделе 1. Отдел 1 состоит из 5 корпусов, [1, 2, 3, 4, 5]. Однако alice работает только в зданиях 1 и 2, а bob работает в зданиях 3 и 4. И когда alice запрашивает данные отдела 1, она должна вернуть

{
    "id": 1,
    ...
    "buildings": [1, 2]
}

и если bob запрашивает и для отдела 1, он должен вернуть

{
    "id": 1,
    ...
    "buildings": [3, 4]
}

Есть ли способ сделать это с помощью Django Rest Framework? Я думал об использовании настраиваемого поля для зданий

class DepartmentSerializer(ModelSerializer):
    buildings = PrimaryKeyRelatedField(many=True, queryset=)  # What now?
    class Meta:
        model = Department
        # how do I change this list of buildings accordingly to the user making the request?
        fields = (..., 'buildings') 

, но я не могу получить доступ к пользователю, выполняющему запрос в сериализаторе. Есть предложения?

...