我有模特:
class CommonEditor(models.Model):
def __str__(self):
return 'Common Atributes Mask'
class Color(models.Model):
name = models.CharField(max_length=25)
editor = models.ForeignKey(CommonEditor, on_delete=models.PROTECT, null=True)
所以我这样进行序列化:
class ColorSerializer(serializers.ModelSerializer):
class Meta:
model = Color
fields = '__all__'
class CommonAttributesSerializer(serializers.ModelSerializer):
color = ColorSerializer(many=True, read_only=True)
class Meta:
model = CommonEditor
fields = ('pk', 'color')
然后查看:
class CommonAttributeAPIView(generics.ListCreateAPIView):
serializer_class = CommonAttributesSerializer
queryset = CommonEditor.objects.all()
我只有我的CommonEditor模型的pk。为什么我无法获得完整的Atributes面膜,该如何修复?非常感谢!
答案 0 :(得分:3)
反向外键关系的默认名称为modelname_set
,或者在您的情况下为color_set
。因此,尝试将color
字段重命名为color_set
:
class CommonAttributesSerializer(serializers.ModelSerializer):
color_set = ColorSerializer(many=True, read_only=True)
class Meta:
model = CommonEditor
fields = ('pk', 'color_set')
答案 1 :(得分:1)
select * from wp_woocommerce_sessions;
select * from wp_usermeta where meta_key like '_woocommerce_persistent_cart_%';
在 CommonEditor 的实例中搜索 CommonAttributesSerializer
属性,但找不到。在DRF序列化程序中,名为color
的参数将明确说明在哪里寻找数据。因此,如下更改串行器:
source
答案 2 :(得分:1)
这也可以通过SerializerMethodField
来实现,并且可以如下所示:
class CommonAttributesSerializer(serializers.ModelSerializer):
color = serializers.SerializerMethodField()
class Meta:
model = CommonEditor
fields = ('pk', 'color')
def get_color(self, common_editor):
return ColorSerializer(common_editor.color_set.all(), many=True).data
文档:http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield