2013-03-23 3 views
0

У меня есть приложение, в котором мне нужно запросить базу данных на определенную дату, чтобы проверить, есть ли запись уже для даты x для пользователя y.Как запросить определенный день (DateField) в django ORM

У меня есть модель, которая имеет следующие поля:

class MyModel(models.Model): 
    user = models.ForeignKey(User) 
    day = models.DateField() 
    info = models.CharField(max_length=100) 

В forms.py у меня есть:

class MyForm(forms.ModelForm): 

    class Meta: 
     model = MyModel 

и в коде views.py я хочу, чтобы проверить, если этот день существует в базе данных, поэтому я бегу:

from datetime import date 
from myapp.models import MyModel 
from myapp.forms import MyForm 
... 
#inside the view function 
form = MyForm(request.POST) 
day = date(form.day) 
if days.objects.filter(user=request.user, day=bookday).exists(): 
... do stuff 

И это дает мне:

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/test_url/ 

Django Version: 1.5 
Python Version: 2.7.3 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'south', 
'myapp') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/django/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/django/env/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    25.     return view_func(request, *args, **kwargs) 
File "/django/env/myproject/myapp/views.py" in test_url 
    26.    bookday = date(form.day) 

Exception Type: AttributeError at /test_url/ 
Exception Value: 'MyForm' object has no attribute 'day' 

Хотя он явно имеет дневную форму как DateField. Как я могу сделать то, что необходимо в этом случае?

POST-данные:

POST 
Variable Value 

csrfmiddlewaretoken = u'blahblah' 

day = u'03/27/2013' 

user = u'2' 

HTML-шаблон формы:

<form method="post" action="." > 
{{ form.user }} 
{{ form.day}} 

<input type="submit" value="Submit" /> 
{% csrf_token %} 
</form> 

EDIT: Я разъяснила код и поставить StackTrace.

+0

какая линия вызывает ошибку? можете ли вы включить трассировку и определение вашего класса модели? – shx2

+1

Откуда берутся «дни»? Пожалуйста, опубликуйте всю функцию просмотра, над которой вы работаете. Вам не хватает важной информации. 'bookday' - это объект datetime, а' MyForm' выглядит как обычная форма. Не модель БД. – CppLearner

+0

@ shx2 Включил в себя определение трассировки и модели – Orca

ответ

0

Я получил это для работы. Исправление было настолько простым. В строке, где мне нужно, чтобы получить публикуемое значение дня, я просто использую:

day = form.cleaned_data['day'] 

Вместо того, что я ранее имел:

day = date(form.day) #WRONG CODE 

, а затем передать, что в базу данных как обычные дни. objects.filter (user = request.user, day = day).

Смежные вопросы