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

时间:2020-05-17 19:28:06

标签: python django

我希望能够从LANGUAGES中添加和删除项目,而不是像这样对它们进行硬编码。现在我得到了我需要的东西,它是Dropdown,具有“ English”,“ German”和“ Italian”选项。现在,我需要将它们放在SQLite数据库中并从那里检索,并可以选择添加新语言并删除/编辑现有语言。预先感谢...

LANGUAGES = [

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

    ]

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

2 个答案:

答案 0 :(得分:0)

您可以使用ForeignKey [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字段设置unique=True [Django-doc],以防止创建另一个相同名称的Language对象。

通过设置on_delete=models.PROTECT,我们可以防止删除一种语言,因为MyModel至少引用了一种语言。因此,只有在不再有MyModel引用语言时,您才能删除语言。

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

答案 1 :(得分:0)

如果您希望以表单的形式进行操作,请为语言创建一个新模型并填充表格。

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

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

    # The rest