Django仅在序列化器中仅选择从许多字段到许多字段的特定字段



我的模型:

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中,我只希望从外键中显示特定的备案。例如,在Field创建的情况下,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

最新更新