繁体   English   中英

如何在Django ORM中查询某天(DateField)

[英]How to query for a certain Day (DateField) in django ORM

我有一个应用程序,我需要在其中查询数据库的某个日期,以检查是否已经为用户y输入了日期x的条目。

我有一个具有以下字段的模型:

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>

编辑:我澄清了代码,并把stacktrace。

我有这个工作。 解决方法非常简单。 在我需要获取POSTed天值的行中,我只使用:

day = form.cleaned_data['day']

代替我以前的东西:

day = date(form.day) #WRONG CODE

然后将其作为常规的days.objects.filter(user = request.user,day = day)行传递给数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM