【问题标题】:Django database relationship - TypeError: 'ManyToOneRel' object is not iterableDjango 数据库关系 - TypeError: 'ManyToOneRel' 对象不可迭代
【发布时间】:2018-11-04 23:54:25
【问题描述】:

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

models.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)

Views.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('======================================================================')

【问题讨论】:

  • 请用文本替换图像,然后从控制台复制过去
  • 你要在resposta字段中存储什么?

标签: python django orm django-queryset


【解决方案1】:

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

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

for a in questoes.alternativas_set.all():

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 2019-07-25
    • 2021-06-09
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2013-09-01
    • 2015-09-29
    • 2017-08-27
    相关资源
    最近更新 更多