【问题标题】:Handling multiple Foreign keys from mutiple models in django在 django 中处理来自多个模型的多个外键
【发布时间】:2021-05-12 13:44:28
【问题描述】:

我的教区居民模型如下(仅粘贴相关代码)

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 FamilyOne role

所以我试图在我的 Family Serializer 中实现这一点。

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'

但您可以清楚地看到我在 Parishioner 模型中添加了related_name='role'

那么我怎样才能实现我想要的呢?

我想将成员(教区居民)添加到家庭并为该家庭中的每个成员分配角色。

FamilyRole 的示例:父亲、母亲、儿子、女儿

我的前端将与我的“创建家庭”页面中的此类似(并且我希望通过使用 api/family/ 端点仅向服务器发送一个请求以实现此目的)

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过删除 depth 或将其设置为 2?您的序列化程序中显然有一个字段role,我猜是因为depth 选项,Django 无法识别它。

    那你会问我为什么会识别字段members?不是,这并没有引发错误,因为您的 Parishoner 模型中有一个 related_name family

    【讨论】:

    • 您的Parishoner 模型中有一个related_name members,抱歉拼写错误
    • 是的,我尝试删除/更改深度,并且是的成员没有引发错误。我要做的就是将成员(教区居民)添加到家庭中,并为该家庭中的每个成员分配角色。
    【解决方案2】:

    您的帖子中有几个问题。

    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 of Family

    'Family' object has no attribute 'role'
    

    我猜你的Family 模型没有role 列,但Parishioner 有。

    【讨论】:

    • 是的,这就是问题所在。那么我怎样才能实现我想要的呢?基本上,当我创建家庭时,我想为每个家庭成员分配成员和角色
    猜你喜欢
    • 2020-11-26
    • 2021-10-31
    • 2021-04-01
    • 2011-12-03
    • 2023-01-26
    • 1970-01-01
    • 2021-02-02
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多