django - many=True TypeError 对象不可迭代

标签 django django-rest-framework

我想在 PUT 和 GET 中获取外键值,但是在使用 many=True 时出现错误 TypeError object is not iterable。 以下是我的片段。

我有两个模型,分别是MasterStatusMasterType。在 MasterType 中,我有 MasterStatus 的外键值。

模型.py

class MasterType(models.Model):
    id = models.BigIntegerField(primary_key=True)
    type_name = models.CharField(max_length=255, blank=True, null=True)
    fk_status = models.ForeignKey(MasterStatus)

    def __unicode__(self):
       return u'%s' % (self.type_name)
    class Meta:
        managed = False
        db_table = 'master_type'

在序列化程序中,我使用 many=True 来获取外键的嵌套值。在这里,我使用了 PrimaryKeyRelatedField 序列化程序。

序列化器.py

class MasterTypeSerializer(serializers.HyperlinkedModelSerializer):     
    fk_status = serializers.PrimaryKeyRelatedField(queryset=MasterStatus.objects.all(),many=True)   
    class Meta:
        model = MasterType
        fields = ('id', 'type_name', 'fk_status', 'last_modified_date', 'last_modified_by')
        depth = 2

最佳答案

ForeignKey 链接到单个 MasterStatus 实例,因此它并不多。

你的序列化器应该看起来像这样:

class MasterTypeSerializer(serializers.HyperlinkedModelSerializer):     
    fk_status = serializers.PrimaryKeyRelatedField(
        queryset=MasterStatus.objects.all())

    class Meta:
        model = MasterRepaymentType

class MasterStatusSerializer(serializers.HyperlinkedModelSerializer):     
    fk_type = serializers.PrimaryKeyRelatedField(
        queryset= MasterRepaymentType.objects.all(), many=True)

    class Meta:
        model = MasterStatus

请注意,many 用于 fk_type 字段,因为 MasterStatus 有许多 MasterRepaymentType

希望这对您有所帮助。

关于django - many=True TypeError 对象不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350683/

相关文章:

javascript - Django 将数据发送到模板中的 Javascript

django - from rest_framework.filters import SearchFilter 生成错误,因为无法从 'django.db 导入名称 'ORDER_PATTERN'

python - Django Rest Framework 中匿名用户具有只读访问权限的对象权限

python - Django 授权。使用多个文件时的模型

python - 从 Python 库的角度来看,爬行、解析、索引、搜索之间有什么区别

python - 这个 order_by django 查询的性能如何?

django - Django 表单集中每个表单的初始数据不同

python - 使用 DRF 序列化程序验证包含动态键的嵌套字典

python - django-rest-framework: __init__() 恰好接受 1 个参数(给定 2 个)

javascript - POST 使用 Postman 但不是通过 JavaScript 中的 fetch