【问题标题】:Creating choices from admin page从管理页面创建选择
【发布时间】:2019-12-23 08:39:26
【问题描述】:
我正在尝试用 django 制作一个学校管理系统。我想在“员工”模型中添加“员工类型”字段。在前端,将从下拉菜单中选择。但我不想硬编码选择。我想从管理页面添加选项。我怎样才能用 django 做到这一点?
from django.db import models
#this is over-simlified.
class person(models.model):
name = models.Charfield(max_length =100)
class staff(person):
staff_type = models.Charfield(max_length =20)
【问题讨论】:
标签:
python
django
django-models
【解决方案1】:
如果您希望能够在管理员中添加员工类型,您可以为此添加另一个模型,并为该模型设置一个外键。
class StaffType(person):
name = models.Charfield(max_length=20)
def __str__(self):
return self.name
class Staff(person):
staff_type = models.ForeignKey(StaffType, on_delete=models.PROTECT)
现在,当您在管理员中添加 StaffType 时,添加/编辑 Staff 实例时将成为一个可用选项
【解决方案2】:
您正在寻找ForeignKey。创建一个模型来存储员工类型的名称。然后从 Staff 模型创建该模型的外键。
models.py
class StaffType(person):
name = models.Charfield(max_length=100)
# other fields
class staff(person):
staff_type = models.ForeignKey(StaffType, null=True, on_delete=models.SET_NULL)
# other fields
在管理员中注册该模型
admin.py
from django.contrib import admin
admin.site.register(StaffType)
admin.site.register(staff)
当您添加新的staff 时,您将获得StaffType 的下拉列表,其中包含StaffType 模型的所有条目。
【解决方案3】:
你可以使用枚举:
class staff(person):
types = (
(1, "item1"),
(2, "item2"),
(3, "item3"),
)
staff_type = models.Charfield(max_length =20, choices=types)
或者您可以创建 ea 模型并在选择中使用它,
见下文:
class TypeList(models.Model):
type=models.CharField(max_length=15)
class SampleModel(models.Model):
TypeList=TypeList.objects.all()
staff_type=models.ForeignKey(TypeList,on_delete=models.CASCADE)