167đź‘Ť
The error in question is caused when you try to access the Manager
of a model through an instance of the model. You have used lower case class names. This makes it hard to say if the error is caused by an instance accessing the Manager
or not. Since other scenarios that can cause this error are unknown I am proceeding on the assumption that you have somehow mixed up the topic
variable so that you end up pointing to an instance of the topic
model instead of the class.
This line is the culprit:
forum.topic_count = topic.objects.filter(forum = forum).count()
# ^^^^^
You have to use:
forum.topic_count = Topic.objects.filter(forum = forum).count()
# ^^^^^
# Model, not instance.
What is going wrong? objects
is a Manager
available at the class level, not to the instances. See the documentation for retrieving objects for details. Money quote:
Managers
are accessible only via model classes, rather than from model instances, to enforce a separation between “table-level” operations and “record-level” operations.
(Emphasis added)
Update
See the comments from @Daniel below. It is a good idea (nay, you MUST :P) to use title case for class names. For instance Topic
instead of topic
. Your class names cause some confusion whether you are referring to an instance or a class. Since the Manager isn't accessible via <model> instances
is very specific I am able to offer a solution.The error may not be so self evident always.
- [Django]-How to filter objects for count annotation in Django?
- [Django]-Name '_' is not defined
- [Django]-How to add url parameters to Django template url tag?
33đź‘Ť
For django < 1.10
topic._default_manager.get(id=topic_id)
Though you should not use it like this. The _default_manager and _base_manager are private, so it’s recomended to use them only if you’re inside the Topic model, like when you want to use the Manager in a proprietary function let’s say:
class Topic(Model):
.
.
.
def related(self)
"Returns the topics with similar starting names"
return self._default_manager.filter(name__startswith=self.name)
topic.related() #topic 'Milan wins' is related to:
# ['Milan wins','Milan wins championship', 'Milan wins by one goal', ...]
- [Django]-Django migrate –fake and –fake-initial explained
- [Django]-Add custom form fields that are not part of the model (Django)
- [Django]-Homepage login form Django
12đź‘Ť
Could also be caused by a pair of parantheses too much, e.g.
ModelClass().objects.filter(...)
instead of the correct
ModelClass.objects.filter(...)
Happens to me sometimes when bpython (or an IDE) automatically adds parantheses.
The result, of course, is the same – you have an instance instead of a class.
- [Django]-Celery discover tasks in files with other filenames
- [Django]-How can I list urlpatterns (endpoints) on Django?
- [Django]-Getting the SQL from a Django QuerySet
0đź‘Ť
if topic were a ContentType instance (which it is not), this would have worked:
topic.model_class().objects.filter(forum = forum)
- [Django]-How to duplicate virtualenv
- [Django]-Pass request context to serializer from Viewset in Django Rest Framework
- [Django]-Django values_list vs values
0đź‘Ť
I just had an issue similar to this error. And looking back at your code it seems that it could be your issue too. I think your issue is that your comparing “id” to “int(topic_id)” and topic_id is not set.
def test(request, post_id):
post = topic.objects.get(id = int(topic_id))
post.delete()
I’m guessing your code should use “post_id” not “topic_id”
def test(request, post_id):
post = topic.objects.get(id = int(post_id))
post.delete()
- [Django]-Django Rest JWT login using username or email?
- [Django]-Django using get_user_model vs settings.AUTH_USER_MODEL
- [Django]-How to get the current language in Django?
0đź‘Ť
I got the same error below:
AttributeError: Manager isn’t accessible via CustomUser instances
When I accessed Manager
with request.user.objects
as shown below:
"views.py"
from django.http import HttpResponse
def test(request):
print(request.user.objects)
return HttpResponse("Test")
- [Django]-Django 2.0 – Not a valid view function or pattern name (Customizing Auth views)
- [Django]-Django :How to integrate Django Rest framework in an existing application?
- [Django]-Django: Use of DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT in settings.py?