В моем проекте Django у меня есть файл models.py, который выглядит следующим образом:
from django.db import models
class Battle(models.Model):
def __str__(self):
return self.battle_name
battle_name = models.CharField(max_length=200)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
password = models.CharField(max_length=50)
Когда я захожу в оболочку Django (python manage.py shell
), я не могу взаимодействовать ни с одним из свойств DateTimeField.
$ python manage.py shell
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from battles.models import Battle
>>> Battle.objects.all()
<QuerySet [<Battle: my first battle>, <Battle: Take back the motherland>, <Battle: this is the big one>]>
>>> Battle.objects.filter(battle_name='my first battle')
<QuerySet [<Battle: my first battle>]>
>>> import datetime
>>> Battle.objects.filter(end_time<datetime.datetime.now())
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'end_time' is not defined
>>> Battle.objects.filter(end_time < datetime.datetime.now())
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'end_time' is not defined
Я что-то упускаю?
2 ответа
Позвольте мне добавить немного пояснений.
Battle.objects.filter(end_time < datetime.datetime.now())
Здесь filter()
- вызываемый объект, который принимает аргументы (args или kwargs). С помощью приведенного выше кода вы пытаетесь передать логическое значение (object < object
) в фильтр, вызываемый в качестве аргумента. Теперь, булево значение True
или False
указывает что-либо о поле модели?
Что вы должны сделать, это передать аргумент ключевого слова, а именно
Battle.objects.filter(end_time__lt=datetime.datetime.now())
Теперь filter()
получает необходимую информацию, параметр kwarg end_time__lt
(который задает поле модели вместе с методом сравнения) и значение, которое необходимо сравнить с datetime.datetime.now()
Вы делаете синтаксическую ошибку
Battle.objects.filter(end_time__lt=datetime.datetime.now())
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.