【问题标题】:Django model query isn't going throughDjango 模型查询未通过
【发布时间】:2013-01-02 13:10:13
【问题描述】:

我正在构建一个非常简单的应用程序,它要求用户将城市名称添加到投票中,然后创建输入城市的频率分布。出于某种原因,我的观点不是按名称(主键)从数据库中检索 City 对象。具体来说,根据我的跟踪语句,try: 之后的第一个分配没有通过。由于我是新手,因此必须忽略一些非常明显的东西。请指教。

models.py:

from django.db import models

class City(models.Model):
    name = models.CharField(max_length='20', primary_key=True)
    count = 0

views.py:

def save(request):
name = request.POST['city_name']
try:
    city = City.objects.get(pk=name)
    print 'city does exist'
    city.count += 1
except City.DoesNotExist:
    print 'city does not exist'
    city = City()
    city.name = name
    city.count += 1
city.save()
return render_to_response('thanks.html', {'city_name':name})

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    更改city.count后需要拨打city.save()

    您需要在 try 块和 except 块中执行此操作。

    【讨论】:

    • 没问题,我们都会时不时地这样做 :) 有时它只需要一双新鲜的眼睛。
    • @entrepaul city.count 应该是什么?到目前为止所有城市的数量?然后试试 City.objects.count()
    【解决方案2】:

    你的模型应该是

    class City(models.Model):
        name = models.CharField(max_length='20', primary_key=True)
        count = models.IntegerField(default=0)
    

    作为旁注,(https://docs.djangoproject.com/en/1.4/ref/models/querysets/#get-or-create) 可能有助于清理一下。

    编辑:

    【讨论】:

    • 我认为每次获得 City 对象时,计数始终为 0,并且实际上并未保存到数据库中。我还没有测试过,所以我不能完全确定。
    • 好吧,我觉得你是对的,所以我把它改成了 count = IntegerField(default=0),但是现在即使我做了 syncdb.. . 你知道为什么会这样吗?
    • 运行 syncdb 不会添加到现有架构。您可以删除 City 表或使用 south 来管理架构迁移。另一种解决方案是手动将计数列添加为数据库中的整数字段。
    • 如何将 City 表放到数据库中?
    • 这个post 指出你可以运行:python manage.py reset app_name
    猜你喜欢
    • 2019-08-27
    • 2014-05-27
    • 2018-09-01
    • 2015-07-25
    • 1970-01-01
    • 2021-09-27
    • 2017-08-10
    • 2015-07-13
    相关资源
    最近更新 更多