Home > Back-end >  ERROR: admin.E108 and admin.E116 Django Framework Python
ERROR: admin.E108 and admin.E116 Django Framework Python

Time:11-30

<class 'blog.admin.CommentAdmin'>: (admin.E108) The value of 'list_display[4]' refers to 'active', which is not a callable, an attribute of 'CommentAdmin', or an attribute or method on 'blog.Comment'.

<class 'blog.admin.CommentAdmin'>: (admin.E116) The value of 'list_filter[0]' refers to 'active', which does not refer to a Field.

I am receiving these two errors.

This is my models.py code:

from django.contrib.auth.models import User

# Create your models here.

STATUS = (
   (0,"Draft"),
   (1,"Publish")
)

class Post(models.Model):
   title = models.CharField(max_length=200, unique=True)
   slug = models.SlugField(max_length=200, unique=True)
   author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
   updatedOn = models.DateTimeField(auto_now= True)
   content = models.TextField()
   createdOn = models.DateTimeField(auto_now_add=True)
   status = models.IntegerField(choices=STATUS, default=0)

   class Meta:
       ordering = ['-createdOn']

   def __str__(self):
       return self.title


class Comment(models.Model):
   post = models.ForeignKey(
       Post, on_delete=models.CASCADE, related_name='comments')
   name = models.CharField(max_length=80)
   email = models.EmailField()
   body = models.TextField()
   createdOn = models.DateTimeField(auto_now_add=True)
   status = models.BooleanField(default=False)
   
   class Meta:
       ordering = ['createdOn']

   def __str__(self):
       return 'Comment {} by {}'.format(self.body, self.name)

This is my admin.py code:

from django.contrib import admin
from .models import Post, Comment

# Register your models here.

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'status','createdOn')
    list_filter = ("status", 'createdOn')
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}

@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    list_display = ('name', 'body', 'post', 'createdOn', 'active')
    list_filter = ('active', 'createdOn')
    search_fields = ('name', 'email', 'body')
    actions = ['approveComments']

    def approveComments(self, request, queryset):
        queryset.update(active=True)


admin.site.register(Post, PostAdmin)

This is my forms.py code:

from .models import Comment
from django import forms


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('name', 'email', 'body')

Any help is greatly appreciated.

CodePudding user response:

status = models.IntegerField(choices=STATUS, default=0) should be active = models.IntegerField(choices=STATUS, default=0)

CodePudding user response:

The message is clear 'active' is not a field

class Comment(models.Model):
   post = models.ForeignKey(
       Post, on_delete=models.CASCADE, related_name='comments')
   name = models.CharField(max_length=80)
   email = models.EmailField()
   body = models.TextField()
   createdOn = models.DateTimeField(auto_now_add=True)
   status = models.BooleanField(default=False)

your fields are: post, name, email, createdOn, status

Therefore create a field named active or suppress active in list_display & list_filter

  • Related