почему нельзя скрыть поле слага в django admin?

#python #django #django-admin

Вопрос:

когда я пытаюсь исключить поле «пуля «в форме администратора django,я получил следующее сообщение:» Ошибка ключа в /admin/post/post/add/ «Ключ» пуля «не найден в «PostForm». Выбор таков: автор, содержание, изображение, название.» Почему? код django: модель: models.py :

 from django.db import models
from django.utils import timezone
from django.urls import reverse

# Create your models here.
class Post(models.Model):
    title= models.CharField(max_length=50,null=False,blank=False)
    content= models.TextField(max_length=2000,null=False,blank=False)
    image= models.ImageField( upload_to="post-img/")
    created_at=models.DateTimeField(default=timezone.now)
    author=models.CharField(max_length=50,null=True,blank=True)
    slug=models.SlugField(max_length=30)
    

    

    class Meta:
        verbose_name =("Post")
        verbose_name_plural =("Posts")

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("PostDetail", kwargs={'slug': self.slug})

    def headline(self):
        return self.content[:50] '...'
 

admin.py :

 from django.contrib import admin
from .models import Post

# Register your models here.


class PostAdmin(admin.ModelAdmin):
    exclude=('created_at','slug',)
    # fieldsets=(({'fields':('title','content','image',)}),)
    
    list_display=['title','headline','author','created_at']
    prepopulated_fields = {'slug': ('title',)}

    
admin.site.register(Post,PostAdmin)
 

Спасибо!

Комментарии:

1. Похоже, что вы внесли некоторые изменения в свою модель без каких-либо миграций. ./manage.py makemigrations и. ./manage.py migrate И попробуйте еще раз

Ответ №1:

 slug=models.SlugField(max_length=30, blank=True, editable=False)
 

Примечание:

Не садись null на Чарфилда. blank этого достаточно.

вы можете добавить slug field в readonly_fields в администраторе

Ответ №2:

Вы решили исключить его из администратора. Но база данных требует, чтобы она имела значение.

Вам нужно добавить null=True и blank=True в поле:

 slug=models.SlugField(max_length=30, blank=True,  null=True)
 

Примечание: Убедитесь, что вы makemigrations и migrate для этого вступили в силу

См. Документы Django: Параметры администратора модели