简体   繁体   English

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

[英]django select only specific fields from many to many field in serializer

My models: 我的模特:

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

Serializer class: 序列化器类:

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

I have enrolments ,created by,requisite items which are foreign keys and manytomany fields etc .In my list API i want only specific fileds from the foreign key to be displayed. 我有由必需项创建的注册,这些必需项是外键和许多字段等。在我的列表API中,我只希望显示外键中的特定文件。 For example in the created by field, Elsuser is a custom user inheriting from AbstractUser . 例如,在created by字段中,Elsuser是从AbstractUser继承的自定义用户。 I want only the username and email fields from this model and not the entire fields. 我只需要此模型的用户名和电子邮件字段,而不需要整个字段。 Similar case for the manyto many fields . 许多领域的类似情况。 How do i implement this? 我该如何执行呢?

You can create a serializer to get only the required fields. 您可以创建一个序列化程序以仅获取必填字段。 Example: 例:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('') #the fields you require to display

Then change your serializer as: 然后将序列化器更改为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM