这是我的模型
# Models
class Category(models.Model):
parent = models.ForeignKey('Category', null=True, blank=True, related_name="children")
name = models.CharField(max_length=64)
alternate_naming = models.ManyToManyField('businesses.Office', through='CategoryOfficeNaming', blank=True)
class CategoryOfficeNaming(models.Model):
category = models.ForeignKey('Category')
office = models.ForeignKey('businesses.Office')
name = models.CharField(max_length=64)
这是我的序列化程序
# Serializers
class CategoryOfficeNamingSerializer(serializers.ModelSerializer):
class Meta:
model = CategoryOfficeNaming
fields = (
'office',
'name',
)
class CategorySerializer(serializers.ModelSerializer):
# We need special recursive serialization here for Category (parent) -> Category (child) relationship
children = serializers.ListSerializer(read_only=True, child=RecursiveField())
alternate_naming = CategoryOfficeNamingSerializer(many=True)
class Meta:
model = Category
fields = (
'children',
'name',
'alternate_naming',
)
尝试序列化类别时出错:
AttributeError at /api/categories/
'Office' object has no attribute 'category'
似乎序列化程序(备用命名)指向一个Office实例,而不是使用through模型(CategoryOfficeNaming)——为什么?我可能在做傻事!你知道吗
A,哈!你知道吗
原来我是误会了什么时候用通透表一点。我没有使用直通表,而是使用了这种结构,得到了一种适用于这种情况的方法:
型号:
序列化程序:
相关问题 更多 >
编程相关推荐