Моя задача состоит в том, чтобы администратор в моем приложении мог создавать и обновлять данные сотрудника. Учитывая, что пользовательская модель django упрощает аутентификацию, я использовал ее в качестве OnetoOneField в моей модели Employee, представляя ключ в качестве идентификатора сотрудника (имя пользователя).
Моя модель -
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 с возможностью просмотра Speci c Сотрудник отфильтрован по идентификатору пользователя
Как показано на рисунке, поле пользователя показывает мне pk вместо user.username.
Я вижу имя пользователя в форме HTML для POST в API с возможностью просмотра, однако json не возвращает имя пользователя по умолчанию и скорее возвращает pk.
I хотите иметь возможность искать и обновлять данные сотрудника на основе имени пользователя (идентификатор сотрудника).
То, что я пробовал -
Я попытался переопределить поле пользователя как SerializedMethodField, которое возвращает user.username, но для поиска и метода POST по-прежнему требуется pk вместо имени пользователя, поэтому он не ' не решить проблему для меня.
Вложенные serialziers делают вложенный сериализатор доступным только для чтения, что опять-таки делает мою задачу обновления сведений о сотруднике нежелательной.
Как я могу искать объект сотрудника на основе user.username вместо pk ?
Как я могу связать существующий объект пользователя с объектом сотрудника во время создания с именем пользователя объекта пользователя с использованием наборов моделей? Есть ли способ решить эту проблему без необходимости переопределять или писать свои собственные функции создания и обновления для набора моделей?