Django模型managers.py和models.py

时间:2016-07-21 07:03:02

标签: django python-3.x django-models

考虑到以下情况: 的 models.py

from .managers import PersonManager
from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)

managers.py

from .models import Person
from django.db import managers

class PersonManager(models.Manager):
    def create(self, person_dict):
        new_person = Person(
            first_name=person_dict['first_name']
            last_name=person_dict['last_name'])
        new_person.save()

如何编写模型管理器以避免循环导入? 它实际上不起作用,我的猜测是我必须在我的经理中创建我的对象而不将其称为类Person,而是我应该使用更通用的通用Django名称。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这里有一些选择。

首先,您可以在同一个文件中定义模型和管理器; Python没有要求或期望每个类都在自己的文件中。

其次,您实际上不需要将模型导入管理器。经理属于模特,而不是相反;在经理内部,您可以通过self.model参考模型类。

最后,如果这是你的经理所做的全部,那么根本就没有理由。经理已经有create方法;它需要关键字参数,而不是字典,但这只是意味着你可以用Person.objects.create(**person_dict)来调用它。