从管理页面创建选择

时间:2019-12-23 08:39:26

标签: python django django-models

我正在尝试使用Django构建学校管理系统。我想在“工作人员”模型中添加“ staff_type”字段。在前端,将从下拉菜单中选择。但是我不想对选择进行硬编码。我想从管理页面添加选择。如何用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)

3 个答案:

答案 0 :(得分:0)

您可以使用枚举:

import Foundation
import LocalAuthentication

@objc open class AccessControl: NSObject {

  // Singleton
  @objc public static let shared = AccessControl()

  // Private
  private override init() {}

  // Policy
  private var policy: LAPolicy = .deviceOwnerAuthentication


  // Reason
  private var reason: String = "reason"


  @objc static func isAuthenticationSupported() -> Bool {
    if #available(iOS 11.0, *) {
        let localAuthenticationContext = LAContext()
        if localAuthenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
            if #available(iOS 11.2, *) {
                return localAuthenticationContext.biometryType != .none
            } else {
                return localAuthenticationContext.biometryType != .LABiometryNone
            }
        }
    }
    return false
}

@objc func evalute(completion: @escaping ((Bool) -> Void)) {
    var authError: NSError?
    guard context.canEvaluatePolicy(policy, error:  &authError) else {
        completion(false)
        return
    }

    context.evaluatePolicy(policy, localizedReason: reason) { success, evaluateError in
        if success {
            completion(true)
        } else {
            completion(false)
        }
    }
 }
}

或者您可以创建一个ea模型并在选择中使用它, 见下文:

class staff(person):
    types = (
        (1, "item1"),
        (2, "item2"),
        (3, "item3"),
       )
    staff_type = models.Charfield(max_length =20, choices=types)

答案 1 :(得分:0)

如果您希望能够在管理员中添加人员类型,则可以为此添加另一个模型,并对该模型具有外键。

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 :(得分:0)

您正在寻找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模型的所有条目。