2016-07-21 2 views
0

дается следующая ситуация: models.pyДжанго модель managers.py и 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. Есть предположения?

ответ

2

Здесь есть несколько вариантов.

Во-первых, вы можете определить модель и менеджера в том же файле; У Python нет требования или ожидания, что каждый класс находится в собственном файле.

Во-вторых, вам не нужно импортировать модель в диспетчер. Менеджеры принадлежат к моделям, а не наоборот; изнутри менеджера вы можете обратиться к классу модели через self.model.

И, наконец, если это все, что делает ваш менеджер, для этого нет оснований. Менеджеры уже имеют метод create; он принимает параметры ключевых слов, а не dict, но это просто означает, что вы можете называть его Person.objects.create(**person_dict).

+0

Привет, у меня есть много менеджеров, взаимодействующих с другими моделями. Я хотел поставить своих менеджеров в отдельный файл. Но в итоге я столкнулся с проблемой циклического импорта. Думаю, я сохраню их в одном файле. Благодарю. –

Смежные вопросы