django queryset对象返回none而不是0,即使数据库将0存储为字段值

r7knjye2  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(425)

我在django项目中开始使用mysql connector/python而不是mysqlclient时遇到了一个问题。突然,数据库中存储为0的值在结果queryset中变为“none”,下面是一个示例。

queryset = Invoices.objects.all().filter(sold=0)
print(queryset[0].sold)  # Prints "None"

其中相同的语句将使用mysqlclient打印0。
有什么好办法解决这个问题吗?我还没有让mysqlclient在当前的设置中很好地工作,我宁愿不必跟踪依赖于0值的所有调用并重新构造它来处理非类型。
使用有问题的模型编辑:

from django.db import models
from authentication.models import Account, SubUser

class Invoices(models.Model):
    rating = models.CharField(max_length=5, null=True)
    serial = models.CharField(max_length=60, null=False)
    amount = models.CharField(max_length=60, null=False)
    debtor = models.CharField(max_length=128, null=False)
    debtorname = models.CharField(max_length=128, null=False)
    seller = models.ForeignKey(Account, on_delete=models.DO_NOTHING, related_name='soldinvoices', null=False)
    dateout = models.CharField(max_length=256, null=False)
    expiration = models.CharField(max_length=256, null=False)
    buyer = models.ForeignKey(Account, on_delete=models.DO_NOTHING, related_name='boughtinvoices', null=True)
    fid = models.CharField(max_length=256, null=False)
    filepath = models.CharField(max_length=256, null=False)
    approved = models.IntegerField(default=0)
    paid = models.IntegerField(default=0)
    sold = models.IntegerField(default=0)
    date = models.DateTimeField(auto_now_add=True, null=False)
    subseller = models.ForeignKey(SubUser, null=True, on_delete=models.DO_NOTHING)
    askingprice = models.CharField(max_length=100, null=True)

销售、支付和批准都返回为“无”,即使可以使用0作为值进行查询。
其他示例:

my_foo = Foo(bar=0)
my_foo.save()
print(my_foo.bar)  # prints 0

使用mysql连接器python的单独查询在queryset中产生0。
django版本2.0.3.0,mysql连接器python版本8.0.12。

o2gm4chl

o2gm4chl1#

将null参数传递给所有这些字段。

dgiusagp

dgiusagp2#

如果还有人(像我一样)遇到这个问题,我找到了一个对我有效的解决方案。在数据库配置中 settings.py 文件中,添加以下选项:

'OPTIONS': {'use_pure': True }

这为我解决了问题。希望这有帮助。

相关问题