I’m designing a Django app and experiencing an error message:
JavaScript
x
13
13
1
AttributeError at /
2
'function' object has no attribute 'objects'
3
Request Method:
4
GET
5
Request URL:
6
http://127.0.0.1:8000/
7
Django Version:
8
2.2.10
9
Exception Type:
10
AttributeError
11
Exception Value:
12
'function' object has no attribute 'objects'
13
This is my views.py that generates the message:
JavaScript
1
17
17
1
from django.shortcuts import render
2
from post.models import posts
3
4
5
def index(request):
6
featured = Post.objects.filter(featured=True)
7
context = {
8
'object_list': featured
9
}
10
return render(request, 'index.html', context)
11
12
def blog(request):
13
return render(request, 'blog.html', {})
14
15
def Post(request):
16
return render(request, 'post.html', {})`
17
and this is my model.py
JavaScript
1
29
29
1
from django.db import models
2
from django.contrib.auth import get_user_model
3
4
5
user = get_user_model()
6
7
class author(models.Model):
8
user = models.OneToOneField(user, on_delete=models.CASCADE)
9
profile_picture = models.ImageField
10
11
class category(models.Model):
12
title = models.CharField(max_length=20)
13
14
def __str__(self):
15
return self.title
16
17
class posts(models.Model):
18
title = models.CharField(max_length=100)
19
overview = models.TextField()
20
timestamp = models.DateTimeField(auto_now_add=True)
21
comment_count = models.IntegerField(default=0)
22
author = models.ForeignKey(author, on_delete=models.CASCADE)
23
thumbnail = models.ImageField()
24
categories = models.ManyToManyField(category)
25
featured = models.BooleanField()
26
27
def __str__(self):
28
return self.title
29
Thanks for any help.
Advertisement
Answer
You wrote a view function named Post
, hence Post.objects
refers to the Post
function, not the model. You furthermore named your model posts
, instead of Post
. I strongly advise to rename your model to Post
, since Django models are normally singular, and written in PerlCase:
JavaScript
1
16
16
1
from django.shortcuts import render
2
from post.models import posts
3
4
5
def index(request):
6
featured = posts.objects.filter(featured=True)
7
context = {
8
'object_list': featured
9
}
10
return render(request, 'index.html', context)
11
12
def blog(request):
13
return render(request, 'blog.html', {})
14
15
def post(request):
16
return render(request, 'post.html', {})
Of course then you should rename the variables accordingly.