在使用管理界面时,我很难让我的模型管理器正常工作。基本上,我有两个模型:
class Employee(models.Model):
objects = models.EmployeeManager()
username = models.CharField(max_length=45, primary_key=True)
. . .
class Eotm(models.Model): #Employee of the Month
date = models.DateField()
employee = models.ForeignKey(Employee)
. . .
我有一个
EmployeeManager
类重写
get()
方法,类似于:
class EmployeeManager(models.Manager):
use_for_related_fields = True
def get(self, *arguments, **keywords):
try:
return super(EmployeeManager, self).get(*arguments, **keywords)
except self.model.DoesNotExist:
#If there is no Employee matching query, try an LDAP lookup and create
#a model instance for the result, if there is one.
基本上,我们的想法是
Employee
如果数据库中不存在对象,则会根据Active Directory中的信息自动创建这些对象。这在我的应用程序代码中很有效,但是当我尝试为
Eotm
模特,情况不太好。我替换了默认的小部件
ForeignKey
字段与
TextInput
小部件,用户可以键入用户名(因为
username
是主键)。理论上,这应该叫做
EmployeeManager.get(username='whatever')
,它将返回
员工
就像默认的管理器一样,或者创建一个并返回它(如果还不存在的话)。问题是,我的经理没有被利用。
我在Django文档中找不到有关使用自定义
Manager
类和管理站点,除了
generic manager documentation
. 我确实找到了
blog entry
关于指定自定义管理器
ModelAdmin
类,但这并不真正有帮助,因为我不想更改由
模型管理员
类,但它与之相关。