从数据库Django中的数据填充下拉列表

2024-04-24 19:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够从语言中添加和删除项,而不是像这样硬编码。现在我得到了我所需要的,这是下拉式的“英语”、“德语”和“意大利语”选项。现在,我需要将它们放在SQLite数据库中并从那里检索,并提供添加新语言和删除/编辑现有语言的选项。先谢谢你

LANGUAGES = [

        ("1", "English"),
        ("2", "German"),
        ("3", "Italian"),

    ]

language = models.CharField(max_length=50, choices=LANGUAGES, default=1, null=False)


Tags: 语言数据库编辑编码sqliteenglishmodels选项
2条回答

您可以使用^{} [Django-doc]执行此操作,例如:

class Language(models.Model):
    name = models.CharField(max_length=50, unique=True)

    def __str__(self):
        return self.name

class MyModel(models.Model):
    language = models.ForeignKey(Language, on_delete=models.PROTECT)

然后可以使用Language的记录填充数据库,并选择MyModel对象的语言

如果使用ModelForm,那么标准Django将使用“目标”模型中的选项进行下拉(并使用str(…)表示这些对象)

最好为name字段设置^{} [Django-doc],以防止创建另一个同名的Language对象

通过设置^{}我们可以防止删除一种语言,因为MyModel至少使用一个对象引用该语言。因此,只有当MyModel不再引用语言时,才能删除语言

数据库通常会保证引用完整性。这意味着language列存储它所引用的对象的主键的值。数据库通常保证,如果一个这样的列包含一个值x,那么Language的表中就有一个具有该值的主键

如果您希望在表单中执行此操作,请为语言创建一个新模型并填充表

class Language(Model):
    name = models.CharField(max_length=50)

class MyLanguageForm(ModelForm):
    language = forms.ModelChoiceField(queryset=Languages.objects.all())

    # The rest

相关问题 更多 >