1

I'm designing a Django app and experiencing an error message:

AttributeError at /
'function' object has no attribute 'objects'
Request Method:
GET
Request URL:
http://127.0.0.1:8000/
Django Version:
2.2.10
Exception Type:
AttributeError
Exception Value:
'function' object has no attribute 'objects'

This is my views.py that generates the message:

from django.shortcuts import render
from post.models import posts


def index(request):
    featured = Post.objects.filter(featured=True)
    context = {
        'object_list': featured
    }
    return render(request, 'index.html', context)

def blog(request):
    return render(request, 'blog.html', {})

def Post(request):
    return render(request, 'post.html', {})`

and this is my model.py

from django.db import models
from django.contrib.auth import get_user_model


user = get_user_model()

class author(models.Model):
    user = models.OneToOneField(user, on_delete=models.CASCADE)
    profile_picture = models.ImageField

class category(models.Model):
    title = models.CharField(max_length=20)

    def __str__(self):
        return self.title

class posts(models.Model):
    title = models.CharField(max_length=100)
    overview = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    comment_count = models.IntegerField(default=0)
    author = models.ForeignKey(author, on_delete=models.CASCADE)
    thumbnail = models.ImageField()
    categories = models.ManyToManyField(category)
    featured = models.BooleanField()

    def __str__(self):
        return self.title

Thanks for any help.

1 Answer 1

3

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:

from django.shortcuts import render
from post.models import posts


def index(request):
    featured = posts.objects.filter(featured=True)
    context = {
        'object_list': featured
    }
    return render(request, 'index.html', context)

def blog(request):
    return render(request, 'blog.html', {})

def post(request):
    return render(request, 'post.html', {})

Of course then you should rename the variables accordingly.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.