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