Предположим, у меня есть эти модели:
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')
, но я не могу получить доступ к пользователю, выполняющему запрос в сериализаторе. Есть предложения?