我正在尝试使用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)
答案 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
模型的所有条目。