【问题标题】:django select only specific fields from many to many field in serializerdjango 仅从序列化程序中的多对多字段中选择特定字段
【发布时间】:2019-07-14 22:20:27
【问题描述】:

我的模型:

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 的自定义用户。我只想要这个模型中的用户名和电子邮件字段,而不是整个字段。多对多领域的类似情况。我该如何实施?

【问题讨论】:

    标签: django python-3.x django-rest-framework


    【解决方案1】:

    您可以创建一个序列化程序来仅获取必填字段。示例:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多