Django: поиск поля пользователя OnetoOne с использованием имени пользователя с наборами представлений модели (Django Rest API)

Моя задача состоит в том, чтобы администратор в моем приложении мог создавать и обновлять данные сотрудника. Учитывая, что пользовательская модель django упрощает аутентификацию, я использовал ее как OnetoOneField в моей модели сотрудников, представляя ключ как идентификатор сотрудника (имя пользователя).

Моя модель -

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, unique=True)
    date_of_join = models.DateField(blank=True, null=True)
    date_of_birth = models.DateField(blank=True, null=True)
    designation = models.CharField(max_length=255, null=True)
    mobile = models.CharField(max_length=255, null=True)
    personal_email = models.CharField(max_length=255, blank=True, null=True)
    official_email = models.CharField(max_length=255, blank=True, null=True)
    current_station = models.CharField(
        max_length=255, default="Chennai", null=True)

    def __str__(self):
        return self.name

Сериализаторы -

class EmployeeSerializer(serializers.ModelSerializer):

    class Meta:
        model = Employee
        fields = ('user', 'name', 'date_of_join', 'date_of_birth',
                  'designation', 'mobile', 'landline', 'personal_email', 
                  'official_email', 'current_station')

Мой набор представлений модели:

class EmployeeListSet(viewsets.ModelViewSet):
    lookup_field = 'user'
    serializer_class = EmployeeSerializer
    queryset = Employee.objects.all()

API для просмотра определенного сотрудника, отфильтрованный по идентификатору пользователя

Как показано на изображении, в поле пользователя отображается pk вместо user.username.

Я могу видеть имя пользователя в HTML-форме для POST в доступном для просмотра API, однако json по умолчанию не возвращает имя пользователя, а возвращает pk.

Я хочу иметь возможность искать и обновлять информацию о сотруднике на основе имени пользователя (идентификатора сотрудника).

Что я пробовал -

Я попытался переопределить поле пользователя как SerializedMethodField, которое возвращает user.username, но метод поиска и POST по-прежнему требует pk вместо имени пользователя, поэтому это не решает проблему для меня.

Вложенные сериализаторы делают вложенный сериализатор доступным только для чтения, что снова делает мою задачу по обновлению сведений о сотрудниках нежелательной.

Как я могу найти объект сотрудника на основе user.username вместо pk?

Как я могу связать существующий объект пользователя с объектом сотрудника во время создания с именем пользователя объекта пользователя, используя наборы моделей? Есть ли способ решить эту проблему без переопределения или написания собственных функций создания и обновления для набора моделей?


person Vishhvak Srinivasan    schedule 01.03.2020    source источник
comment
Этот вопрос уже задавали здесь   -  person Sreevardhan Reddy    schedule 01.03.2020
comment
@SreevardhanReddy Упомянутый вами вопрос не отвечает на мой запрос, поскольку предложенное решение предназначено для GET, а не для CREATE/POST.   -  person Vishhvak Srinivasan    schedule 01.03.2020