首页 > 解决方案 > Django 数据库关系 - TypeError: 'ManyToOneRel' 对象不可迭代

问题描述

我用了 3 天时间尝试通过表“Questoes”的回复使用表“Alternativas”与数据库建立一对多的关系。我想制作一个测验系统,其中问题存储在数据库中的一个表中,答案在另一个表中,以这种方式在它们之间建立关系,但是在尝试拉取响应列时返回以下错误,接下来是打印。

在此处输入图像描述

模型.py:

class Questoes(models.Model):
    id = models.IntegerField(max_length=10, primary_key=True)
    enunciado = models.CharField(max_length=255, null=False)
    alternativa_correta = models.CharField(max_length=255, null=True)
    resposta = models.ManyToOneRel('resposta', to='Alternativas', 
    field_name='descricao')

class Alternativas(models.Model):
    id = models.IntegerField(max_length=10, primary_key=True)
    questao_id = models.ForeignKey('Questoes', on_delete=CASCADE, 
    db_column="questao_id")
    descricao = models.CharField(max_length=255, null=True)

视图.py:

def dashboard(request):
    if request.method == 'POST':
        questoes = {}
        questoes['questoes'] = Questoes.objects.get(id=1)
        print('=======================================================================')
        print(questoes)
        print('=======================================================================')
        for a in questoes.resposta:
            print(a)
        print('======================================================================')

标签: pythondjangoormdjango-queryset

解决方案


ManyToOneRel 不是一个字段。它是一个内部类,是关系实现的一部分,而不是您应该在模型中使用的东西。

您已经在这些模型之间建立了多对一的关系,因为您questao_id在 Alternativas 中进行了定义。删除该 ManyToOneRel 定义并在您的视图中使用反向关系:

for a in questoes.alternativas_set.all():

推荐阅读