【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 2013-02-16
        • 2017-12-03
        • 1970-01-01
        • 2018-07-02
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        相关资源
        最近更新 更多