如何选择列?

时间:2019-07-25 22:00:28

标签: django django-models

class question(models.Model):
    q = models.CharField(max_length=500)
    choice1 = models.CharField(max_length=500)
    choice2 = models.CharField(max_length=500)
    choice3 = models.CharField(max_length=500)
    answer = models.CharField(max_length=500, choices=[choice1, choice2, choice3])

这给了我这个错误:

“选择”必须是可迭代的,包含(实际值,人类可读的名称)元组。

但是我不知道如何解决?

谢谢

2 个答案:

答案 0 :(得分:1)

您必须使用choices字段,或者为“问题”和“选择”创建两个不同的模型,包括它们之间的关系。

如果创建choices字段,则将无法为一个问题插入多个值。

示例:

class question(models.Model):
    ANSWER_CHOICES = [
        (F, 'Freshman'),
        (S, 'Sophomore'),
        (J, 'Junior'),
        (S, 'Senior'),
    ]

    question = models.CharField(max_length=500)
    answer = models.CharField(
        max_length=1,
        choices=ANSWER_CHOICES,
        null=TRUE,
    )

Source of Choices Field

另一方面,两种不同的模型将有效地解决您的问题。

示例:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Source from Django Doc

答案 1 :(得分:0)

这是一个例子

personnelsex_choices = (('M','Male'),('F','Female'))
personnelsex = models.CharField('Gender',max_length=1,choices=personnelsex_choices, null=True)

您的错误消息要求输入iterable,可以是listtuple或生成器表达式等。在此示例中,它是tuple。元组包含成对的值。该对的第一个值是存储在字段personnelsex中的值,而第二个值是“人类可读的名称”,它将在应用程序中显示给用户。

在您的代码中,没有迭代项包含选择,当必须有两个(成对)时每个选择只有一个条目,并且没有必需的值。