Django选择和字典

时间:2016-10-19 22:38:43

标签: python django dictionary

我有代码

ADD content.tgz /var/www/html

模型中的代码

JOBS = 1
CATEGORY_CHOICES = ((JOBS, "Jobs"),)

取代"工作"我想添加一个字典,并在模板中访问它。例如

category = models.IntegerField(choices=CATEGORY_CHOICES, default=JOBS)

但我得到以下

enter image description here

如何将字典添加到选项中? 我能够创建一个模型,它将被设置:标题和图标。但相反,我决定创造一个选择。标题我可以添加,但是对于所选项目来设置图标?

3 个答案:

答案 0 :(得分:2)

Django模型中的选择是(key, value)元组。关键是在保存时存储在模型领域中的意义是什么,并且该值意味着作为选项显示的内容。你不能简单地将字典塞进价值中。

例如,以下选项会将human存储在数据库中,并在选择字段中显示Humans

species = [
    ('human', 'Humans'),
    ('reptile', 'Reptiles'),
    ('cylons', 'Aliens'),
]

相反,您需要重新构建数据模型的方式。您应该创建一个单独的Category模型,该模型表示将包含子弹,图标和标题字段的选项。

class Category(models.Model):
    slug  = models.SlugField()
    title = models.CharField()
    icon  = models.CharField()

然后,使用Category将当前模型指向ForeignKey()模型。

class MyModel(models.Model):
    category = models.ForeignKey(Category)

最后,在渲染表单时,可以使用ModelChoiceField将相关的类别模型(与外键相关)呈现为列表中的选项。如果您使用ModelForm,则默认情况下所有外键都将表示为ModelChoiceField

答案 1 :(得分:2)

我会评论,但遗憾的是代表不够。设置IntegerField的方式,它显示字典值并返回字典键。

您想要做的是让该键确定其他几个值的结果。你应该做的是在你提交该表单的任何视图中,根据IntegerField返回的键设置其他值。

换句话说:

STT_FILE

然后在课程或视图中提交此表单:

CATEGORY_CHOICES = ((1, 'Jobs'),(2, 'Cities'),)

答案 2 :(得分:1)

您可以使用Choices班级表单django_model_helpers应用。 https://github.com/rewardz/django_model_helpers

CATEGORY_CHOICES = Choices(
     {"jobs": {'id': 1, 'display': 'Jobs', 'icon':"fa fa-briefcase",'slug':"jobs"}
)

然后在你的模特中

category = models.IntegerField(choices=CATEGORY_CHOICES(), default=CATEGORY_CHOICES.jobs)

现在从代码中访问图标:

icon = CATEGORY_CHOICES.get_value(my_inst.category, "icon")
slug = CATEGORY_CHOICES.get_value(my_inst.category, "slug")