Opened 4 years ago
Closed 4 years ago
#32207 closed Bug (invalid)
Slug field is accepting whitespace when entered through Django shell.
Reported by: | Harshvardhan Anand | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.1 |
Severity: | Normal | Keywords: | slug; prepopulated; error reporting; sqlite |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I am using Django 3.1.3 with Python 3.7.6.
- Slug field is accepting whitespaces when updated from Django shell.
- 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.
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 -
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')
Attachments (1)
Change History (2)
by , 4 years ago
comment:1 by , 4 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
This is expected behavior. The
SlugField
functionality is implemented though validation, which is activated by the forms infrastructure or by manually callingfull_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 likeURLField
.