我有代码
ADD content.tgz /var/www/html
模型中的代码
JOBS = 1
CATEGORY_CHOICES = ((JOBS, "Jobs"),)
取代"工作"我想添加一个字典,并在模板中访问它。例如
category = models.IntegerField(choices=CATEGORY_CHOICES, default=JOBS)
但我得到以下
如何将字典添加到选项中? 我能够创建一个模型,它将被设置:标题和图标。但相反,我决定创造一个选择。标题我可以添加,但是对于所选项目来设置图标?
答案 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")