Джанго внутренний код использует _base_manager
вместо objects
Джанго, разница между _base_manager и объекты
Существует также _default_manager
Я больше привык к использованию objects
В чем разница?
Джанго внутренний код использует _base_manager
вместо objects
Джанго, разница между _base_manager и объекты
Существует также _default_manager
Я больше привык к использованию objects
В чем разница?
Разница между «объектами» и «_base_manager» заключается в том, что вы можете заменить «объекты» на пользовательский менеджер, но «_base_manager» будет по умолчанию экземпляром django.db.models.Manager. В общем, вы не должны использовать '_base_manager'. Иногда Django сам должен использовать «_base_manager», чтобы быть уверенным в его поведении.
from django.db import models
class CommentManager(models.Manager):
pass
class Comment(models.Model):
...
objects = CommentManager()
print(type(Comment.objects)) #<class 'main.models.CommentManager'>
print(type(Comment._default_manager)) #<class 'main.models.CommentManager'>
print(type(Comment._base_manager)) #<class 'django.db.models.manager.Manager'>
Чтобы объяснить «_default_manager» Я дам еще один простой пример:
class Comment(models.Model):
...
custom_objects = CommentManager()
print(type(Comment._default_manager)) #<class 'main.models.CommentManager'>
print(type(Comment._base_manager)) #<class 'django.db.models.manager.Manager'>
print(type(Comment.objects)) #AttributeError: type object 'Comment' has no attribute 'objects'
Итак, вы установили собственный менеджер модели, он не будет иметь атрибут «объектов», но все еще будут иметь _default_manager (ваш экземпляр пользовательского менеджера) и «_base_manager» - экземпляр django.db.models.Manager.
быть также известно, что есть ошибка в исходном коде Django связаны с менеджерами по моему билету: https://code.djangoproject.com/ticket/25897 я представил патч, чтобы исправить это, но она не была применена еще.
Я очень хотел бы поддержать этот вопрос, но моя политика запрещает мне, когда автор не принял ответ, который дает решение. – raratiru