ERROR: admin.E108 и admin.E116 Django Framework Python
<class 'blog.admin.CommentAdmin'>: (admin.E108) Значение 'list_display[4]' ссылается на 'active', который не является вызываемой переменной, атрибутом 'CommentAdmin', атрибутом или методом 'blog.Comment'.
<class 'blog.admin.CommentAdmin'>: (admin.E116) Значение 'list_filter[0]' относится к 'active', которое не относится к полю.
Я получаю эти две ошибки.
Вот мой код models.py:
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)
<
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)
Вот мой код admin.py:
Вот мой код forms.py:
from .models import Comment
from django import forms
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('name', 'email', 'body')
Любая помощь будет высоко оценена.
статус = models.IntegerField(choices=STATUS, default=0) должен быть активным = models.IntegerField(choices=STATUS, default=0)
Сообщение ясно, что "активный" не является полем
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)
ваши поля: post, name, email, createdOn, status
Поэтому создайте поле с именем active или подавите active в list_display
&
list_filter
Я получил ту же ошибку, описанную ниже:
ERRORS: <class 'store.admin.PersonAdmin'>: (admin.E116) The value of 'list_filter[0]' ссылается на 'PersonAgeFilter', который не ссылается на поле.
При назначении пользовательского фильтра PersonAgeFilter
в list_filter() со скобками, как показано ниже:
# "store/admin.py"
from django.contrib import admin
from .models import Person
class PersonAgeFilter(admin.SimpleListFilter):
# ...
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
list_filter = ("PersonAgeFilter",)
# ↑ Parentheses ↑
Итак, я удалил скобки из "PersonAgeFilter"
, как показано ниже, после чего ошибка была устранена.
# "store/admin.py"
from django.contrib import admin
from .models import Person
class PersonAgeFilter(admin.SimpleListFilter):
# ...
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
list_filter = (PersonAgeFilter,)
# Without parentheses