Django DateField возвращает ошибку: объект str' не имеет атрибута 'day'
Я не уверен, почему я получаю эту ошибку. Я буду рад предоставить дополнительную информацию!
Я работаю над учебником по Django, который делает статьи для блога. У меня есть страница и настроена админка. При попытке добавить статью выдается ошибка.
В моей модели есть поле DateField с auto_now_add=True
. Я бы подумал, что оно будет извлекать время даты, но оно возвращает ошибку на date.day.
AttributeError at /admin/post/article/add/
'str' object has no attribute 'day'
Request Method: POST
Request URL: http://xxx.x.x.x:8000/admin/post/article/add/
Django Version: 4.1.2
Exception Type: AttributeError
Exception Value:
'str' object has no attribute 'day'
Exception Location: /Users/user/PycharmProjects/assembly_tracker/venv/lib/python3.10/site-packages/django/db/models/base.py, line 1338, in _perform_date_checks
Raised during: django.contrib.admin.options.add_view
Python Executable: /Users/user/PycharmProjects/assembly_tracker/venv/bin/python
Python Version: 3.10.3
Python Path:
['/Users/user/PycharmProjects/assembly_tracker',
'/Library/Frameworks/Python.framework/Versions/3.10/lib/python310.zip',
'/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10',
'/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/lib-dynload',
'/Users/user/PycharmProjects/assembly_tracker/venv/lib/python3.10/site-packages']
Server time: Tue, 01 Nov 2022 19:37:30 +0000
Ошибка возникает на следующих строках в _perform_date_checks, когда она достигает date.day
lookup_kwargs = {}
# there's a ticket to add a date lookup, we can remove this special
# case if that makes it's way in
date = getattr(self, unique_for)
if date is None:
continue
if lookup_type == "date":
lookup_kwargs["%s__day" % unique_for] = date.day …
lookup_kwargs["%s__month" % unique_for] = date.month
lookup_kwargs["%s__year" % unique_for] = date.year
else:
lookup_kwargs["%s__%s" % (unique_for, lookup_type)] = getattr(
date, lookup_type
)
Вот код модели:
from django.db import models
from django.contrib.auth.models import User
class Article(models.Model):
options = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=255, unique=True)
slug = models.SlugField(max_length=255, unique_for_date='published')
post = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='Posts')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=16, choices=options, default='draft')
published = models.CharField(max_length=255, unique=True)
def __str__(self):
return self.title
class Meta:
ordering = ('published',)
Я еще не пробовал никаких исправлений, потому что не уверен, почему дата втягивается в строку. Более ранний шаг указывает на исключение {'created', 'id', 'updated'}
, но я не уверен, связано это или нет.