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'}, но я не уверен, связано это или нет.

Вернуться на верх