Как сделать атрибут доступным только для чтения в сериализаторах в DRF?
У меня есть сериализатор.
class MySerializer(serializers.ModelSerializer):
class Meta:
model = models.MyClass
Мой класс модели:
class MyClass(models.Model):
employee = models.ForeignKey("Employee", on_delete=models.CASCADE)
work_done = models.TextField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Я хочу, чтобы атрибут employee был доступен только для чтения и должен показывать только это значение в своем поле:
employee = Employee.objects.get(user=self.request.user)
Как я могу сделать это в сериализаторах?
extra_kwargs = {
'employee': {'read_only': True}
}
Вы можете сделать его доступным только для чтения, указав его в сериализаторе, и показать значение текущего пользователя, изменив метод init следующим образом :
class MySerializer(serializers.ModelSerializer):
class Meta:
model = models.MyClass
read_only_fields = [
'employee',
]
def get_employee(self, instance) -> Any:
employee = None
request = self.context.get('request')
if request and hasattr(request, 'user'):
employee = Employee.objects.get(request.user)
# if you want to show serialize value of employee
# then write a EmployeeSerializer and add following blocked code
# if employee:
# serializer = EmployeeSerializer(user, many=False)
# employee = serializer.data
return employee