我希望能够从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)
答案 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