Django的选择.如何设置默认选项?

bel*_*sun 28 django

如何设置默认STATUSES选项?

class Order(models.Model):
    STATUSES = (
        (u'E', u'Expected'),
        (u'S', u'Sent'),
        (u'F', u'Finished'),
    )

    status = models.CharField(max_length=2, null=True, choices=STATUSES)
Run Code Online (Sandbox Code Playgroud)

roc*_*ier 45

status = models.CharField(max_length=2, null=True, choices=STATUSES, default='E')
Run Code Online (Sandbox Code Playgroud)

或者,如果STATUSES发生变化,则避免设置无效的默认值:

status = models.CharField(max_length=2, null=True, choices=STATUSES, default=STATUSES[0][0])
Run Code Online (Sandbox Code Playgroud)


Meh*_*are 10

这是一个老问题,只是想添加现在可用的 Djanto 3.x+ 语法:

class StatusChoice(models.TextChoices):
    EXPECTED = u'E', 'Expected'
    SENT = u'S', 'Sent'
    FINISHED = u'F', 'Finished'

Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此语法来设置默认值:

status = models.CharField(
    max_length=2,
    null=True,
    choices=StatusChoice.choices,
    default=StatusChoice.EXPECTED
)
Run Code Online (Sandbox Code Playgroud)

  • unicode 指定也不是必需的——它甚至没有在 django 文档中使用。似乎只是很久以前提出这个问题时的遗留问题。 (3认同)