我的教区居民模型如下(仅粘贴相关代码)
class Parishioner(models.Model):
family = models.ForeignKey(Family, null=True, on_delete=models.PROTECT, related_name='members')
role = models.ForeignKey(FamilyRole, null=True, blank=True, on_delete=models.PROTECT, related_name='role')
教区居民可以在该家庭中拥有one Family
和One role
所以我试图在我的家庭序列化器中实现这一点。
class FamilySerializer(serializers.ModelSerializer):
members = serializers.PrimaryKeyRelatedField(
many=True,
queryset=Parishioner.objects.all(),
allow_null=True,
required=False
)
role = serializers.PrimaryKeyRelatedField(
many=True,
queryset=FamilyRole.objects.all(),
allow_null=True,
required=False
)
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution', 'members', 'role', 'enabled')
read_only_fields = ('id',)
depth = 1
基本上我想要做的是当我添加家庭时,我可以向该家庭添加成员(教区居民)并为每个成员分配一个角色。
我在这里做错了什么?
因为当我加载我的 api/family/
我遇到以下错误
'Family' object has no attribute 'role'
但是您可以清楚地看到我在教区居民模型中添加了 related_name='role'
。
那么我怎样才能实现我想要的?
我想将成员(教区居民)添加到家庭并为该家庭中的每个成员分配角色。
FamilyRole
的示例:父亲、母亲、儿子、女儿
我的前端将与我的“创建家庭”页面中的类似(并且我希望通过使用 api/family/
端点仅向服务器发送一个请求以实现此目的)
答案 0 :(得分:0)
您是否尝试删除 depth
或将其设置为 2?您的序列化程序中显然有一个字段 role
,我的猜测是 Django 无法识别它,因为 depth
选项。
那你会问我为什么要识别字段members
?不是,这并没有引发错误,因为您的 family
模型中有一个 related_name Parishoner
。
答案 1 :(得分:0)
您的帖子中有几个问题。
class Parishioner(models.Model):
family = models.ForeignKey(Family, null=True, on_delete=models.PROTECT, related_name='members')
role = models.ForeignKey(FamilyRole, null=True, blank=True, on_delete=models.PROTECT, related_name='role')
所以 Partishioner
有一个 role
列。
class FamilySerializer(serializers.ModelSerializer):
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution', 'members', 'role', 'enabled')
在序列化程序中,您尝试访问 role
的 Family
。
'Family' object has no attribute 'role'
我猜您的 Family
模型没有 role
列,但 Parishioner
有。