Django Shell和Django Web App给出不同的结果[重复]

Posted

技术标签:

【中文标题】Django Shell和Django Web App给出不同的结果[重复]【英文标题】:Django Shell and Django Web App giving different results [duplicate] 【发布时间】:2013-11-05 11:47:04 【问题描述】:

我有一个运行良好的 django 应用程序,但突然之间似乎出现了问题。

class ClosedUserGroup(models.Model):
    """ Preset definitions for ClosedUserGroup:
    """
    is_active = models.BooleanField(default=True)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(
        auto_now=True,
        auto_now_add=True,
        null=True,
        default='2013-08-15 13:37:13.370030'
    )
    name = models.CharField(max_length=256, default='<MISSING:CUG_NAME')
    description = models.CharField(max_length=256)


class Partner(models.Model):
    id = models.IntegerField(primary_key=True)
    is_active = models.BooleanField(default=True)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(
        auto_now=True,
        auto_now_add=True,
        null=True,
        default=datetime.datetime.now()
    )
    name = models.CharField(max_length=256, default='<MISSING:PARTNERNAME>')

class PartnerCug(models.Model):
    """ Partner to ClosedUserGroup relation
    """
    is_active = models.BooleanField(default=True)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(
        auto_now=True,
        auto_now_add=True,
        null=True,
        default='2013-08-15 13:37:13.370030'
    )
    partner = models.ForeignKey(Partner)
    cug = models.ForeignKey(ClosedUserGroup)        

class Account(models.Model):
    """
        Account:
        TODO:DESCRIPTION
    """
    id = models.IntegerField(primary_key=True)
    is_active = models.BooleanField(default=True)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(
        auto_now=True,
        auto_now_add=True,
        null=True,
        default=datetime.datetime.now()
    )
    number = models.CharField(max_length=64)
    submitted_by = models.ForeignKey(
        Partner,
        db_column='submitted_by'
    )       

在django shell中,以下命令运行成功,返回结果为1:

from myapp.models import Account
account_object = Account.objects.filter(id=1)
account_object.filter(account__submitted_by__partnercug__cug=3).count()

但是,在 django 本身中,我有这个功能

def get_other_accounts():
    """get total accounts"""
    account_object = Account.objects.filter(id=1)
    total_accounts = account_object.filter(account__submitted_by__partnercug__cug=3).count() 

但是这会失败并出现错误DatabaseError: current transaction is aborted, commands ignored until end of transaction block,它指向该函数的最后一行。所以它的工作 django shell 但不是来自网络应用程序。

【问题讨论】:

退出shell后尝试过? 看看你在两个过滤器中得到了什么,没有什么不同? 你知道在 shell 中你正在计算 PartnerCug 对象,而在 Django 函数中你正在计算 ClosedUserGroup (cug) 对象,不管它们是什么? 第一个查询有account__submitted_by__partnercug,第二个有account__submitted_by__partnercug __cug @FallenAngel 我已经编辑过了。这是一个错字。错误仍然存​​在 【参考方案1】:

ClosedUserGroup 模型上缺少 idpk 字段(主键)?

我看不出它在 shell 或 web 中是如何工作的。

【讨论】:

模型没有,但夹具有,所以在数据库中,主 ID 就在那里。 然后将其添加到模型中? Django 不应该知道Field 未描述的任何 DB 列,它们只会导致问题

以上是关于Django Shell和Django Web App给出不同的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 和 Django 搭建 Web 应用

使用 manage.py shell 更改 Django 站点显示名称?

Django docker image仅启动python shell

Python之Web架构Django部署教程

Python+Django(Python Web项目初体验)

29Python之Web框架Django入门