Мои модели:
class RequisiteItem(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
enrollable = models.ForeignKey(Enrollable, on_delete=models.CASCADE)
created_by = models.ForeignKey(ElsUser, on_delete=models.CASCADE)
completed_within_days = models.IntegerField()
date_completed_by = models.DateTimeField(default=now, editable=False)
class Requisite(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(default=None, blank=True, null=True, max_length=255)
description = models.CharField(default=None, blank=True, null=True, max_length=255)
items = models.ManyToManyField(RequisiteItem, blank=True)
enrolments = models.ManyToManyField(Enrollee, blank=True)
created_by = models.ForeignKey(ElsUser, on_delete=models.CASCADE, related_name = "requisites", default=None)
timestamp = models.DateTimeField(default=now, editable=False)
@property
def created_by_user(self):
return self.created_by.username
Класс сериализатора:
class RequisiteSerializer(serializers.ModelSerializer):
created_by = serializers.CharField(source='created_by_user')
class Meta:
model = Requisite
fields = ('id', 'name', 'description', 'items', 'enrolments', 'created_by', 'timestamp')
read_only_fields = ['id']
depth = 1
У меня есть регистрации, созданные необходимыми элементами, которые являются внешними ключами и многими полями и т. д. В моем API списка я хочу, чтобы отображались только определенные поля из внешнего ключа. Например, в поле created by Elsuser является пользовательским пользователем, унаследованным от AbstractUser. Мне нужны только поля имени пользователя и электронной почты из этой модели, а не все поля. Аналогичный случай для полей «многие-ко-многим». Как мне это реализовать?





Вы можете создать сериализатор, чтобы получить только необходимые поля. Пример:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('') #the fields you require to display
Затем измените свой сериализатор как:
class RequisiteSerializer(serializers.ModelSerializer):
created_by = UserSerializer()
class Meta:
model = Requisite
fields = ('id', 'name', 'description', 'items', 'enrolments', 'created_by', 'timestamp')
read_only_fields = ['id']
depth = 1