【问题标题】:getting null in object of many to many relation object django在多对多关系对象django的对象中获取null
【发布时间】:2022-01-17 07:35:31
【问题描述】:

我在数据库中保存了一个具有多对多关系的对象,但是当我获取它时,它会返回该关系对象的 ID,但我想要整个对象,所以我添加了一个属性序列化程序,然后,它只返回 object.name 并且它的值为 null,我不知道它为什么会这样?有人可以帮忙吗?

views.py

queryset = Tag.objects.filter(project_id=project_id).all()
serializer = TagSerializer(queryset, many=True)
return Response(serializer.data)

序列化器.py

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        # fields = '__all__'
        fields = ['id', 'name', 'description', 'singleline']

    singleline = SinglelineSerializer(read_only=True)

models.py

class Tag(models.Model): 
    name = models.CharField(max_length=255, default='')
    description = models.CharField(max_length=255, default='')
    singleline = models.ManyToManyField(Singleline)
   
    class Meta:
        db_table = 'tags'

【问题讨论】:

    标签: python django database postgresql relational-database


    【解决方案1】:

    一个Tag 可以有很多 Singlelines,你需要使用many=True,因为它是一个集合:

    class TagSerializer(serializers.ModelSerializer):
        singleline = SinglelineSerializer(read_only=True, many=True)
        
        class Meta:
            model = Tag
            fields = ['id', 'name', 'description', 'singleline']

    您可以通过预置singleline 关系来提高视图的效率,从而批量加载所有相关的Singlelines:

    queryset = Tag.objects.filter(project_id=project_id).prefetch_related('singleline')
    serializer = TagSerializer(queryset, many=True)
    return Response(serializer.data)

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 2020-02-05
      • 2013-11-16
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2020-09-22
      • 2010-10-21
      相关资源
      最近更新 更多