1. Slug field is **accepting whitespaces** when updated from Django shell.
2. Slug field is **not prepopulated** if data(like title) is entered from
Django shell.
But if slug is entered with whitespaces from admin panel then it will
raise error. And similarly if we create data(e.g. - title) from admin
panel slug field is prepopulated.
[https://bit.ly/2Km19CX I have also created a video(saved in google
drive) explaining the issue.]
**In the image below, you can see the slug field with whitespaces -**
[[Image(https://bit.ly/35FB7Te)]]
**The model I have defined in models.py is**
{{{
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published')
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='blog_post')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES,
default='draft')
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
}}}
**Modified admin panel -**
{{{
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug':('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ('status', 'publish')
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32207>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* Attachment "db.png" added.
* status: new => closed
* resolution: => invalid
Comment:
This is expected behavior. The `SlugField` functionality is implemented
though validation, which is activated by the forms infrastructure or by
manually calling `full_clean()` on some model. If you set a value and
save, you are on your own, there are no database-level checks. You can see
the exact same behaviour for other fields like `URLField`.
--
Ticket URL: <https://code.djangoproject.com/ticket/32207#comment:1>