#36171 closed Bug (invalid)
When saving an object(null=True, blank=True) with an empty string __str__ in the admin page.
| Reported by: | Antoliny | Owned by: | Antoliny |
|---|---|---|---|
| Component: | contrib.admin | Version: | 5.1 |
| Severity: | Normal | Keywords: | blank, str |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When a field that allows blank and null is used as __str__, an issue occurs when saving the object in the admin page if the value is empty.
TestCase
class Comment(models.Model):
author = models.CharField(max_length=128, null=True, blank=True)
content = models.CharField(max_length=128)
def __str__(self):
return self.author

When clicking the save-related button, the following error is returned.

Everytime an object is saved in the admin page, a LogEntry is also created. It seems that an issue occurs when LogEntry tries to use the object's __str__.
My guess is that the to_python method in the CharField(Form) performs a strip() process, causing the value entered in the admin page to be " " instead of "". As a result, it is treated as None, and an issue occurs when LogEntry tries to use __str__ on that value.
Attachments (3)
Change History (8)
by , 9 months ago
| Attachment: | save_error.png added |
|---|
by , 9 months ago
comment:1 by , 9 months ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
comment:2 by , 9 months ago
| Description: | modified (diff) |
|---|
by , 9 months ago
| Attachment: | save_error_resize.png added |
|---|
comment:3 by , 9 months ago
| Description: | modified (diff) |
|---|
comment:4 by , 9 months ago
| Resolution: | → invalid |
|---|---|
| Status: | assigned → closed |
comment:5 by , 9 months ago
Replying to Sarah Boyce:
To me, the issue here is in the string method should always return a string (eg.
return self.author or "")
If you want to keep spaces, you will need a custom form withstrip=False(see https://docs.djangoproject.com/en/5.1/ref/forms/fields/#charfield)
sarahboyce, I have a small question. 🙋
It seems this issue occurs because even though we set blank=True in the Field(Model), but the admin Form doesn't allow empty value.
Is this how it was originally designed? Does this mean users need to manually configure Form to allow empty fields for Field(Model) where blank=True is set?
To me, the issue here is in the string method should always return a string (eg.
return self.author or "")If you want to keep spaces, you will need a custom form with
strip=False(see https://docs.djangoproject.com/en/5.1/ref/forms/fields/#charfield)