Opened 14 years ago
Last modified 13 years ago
#14471 closed
db.models.Manager regression - can't override some methods — at Version 2
Reported by: | Lucky | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.2 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I want to migrate my project from the django-1.1.2 to the django 1.2.3 and I have problem with custom model managers what overrides Manager.create() method. For example:
class Book(models.Model): title = models.CharField(max_length=10) author = models.ForeignKey(Author) objects = CustomManager() class CustomManager(models.Manager): def create(self, **kwargs): # business logic here return super(CustomManager, self).create(**kwargs)
Django 1.2.3 uses the CustomManager.create() method on the 'objects' descriptor as expected.
Book.objects.create(author=a1, title='How to be smart')
In the django-1.1.2 the same behavior had related field 'book_set' descriptor .
But in the 1.2.3 CustomManager.create() does not called anymore on related field. The next code has different behavior:
author.book_set.create(title='How to program')
The difference in the implementation for create
method in the RelatedManger class. In the 1.1.2 it was delegate result to the create() method of it superclass (CustomManager).
return super(RelatedManager, self).create(**kwargs)
But the 1.2. delegates result to the result of .using(db), what is not superclass, but QuerySet.
return super(RelatedManager, self).using(db).create(**kwargs)
http://code.djangoproject.com/browser/django/trunk/django/db/models/fields/related.py#L423
Look for the actual test case in the attachement. I'm Sorry for my silly english.
Change History (3)
by , 14 years ago
comment:1 by , 14 years ago
Summary: | db.models.Model regression - can't override some methods → db.models.Manager regression - can't override some methods |
---|
comment:2 by , 14 years ago
Description: | modified (diff) |
---|---|
milestone: | → 1.3 |
Triage Stage: | Unreviewed → Accepted |