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

时间:2018-08-19 18:43:59

标签: python mysql django django-models mysql-python

当我开始为我的Django项目使用mysql-connector / python而不是mysqlclient时遇到问题。突然,在结果查询集中,数据库中存储为0的值将变为“无”,这是一个示例。

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

在同一条语句中,使用mysqlclient打印0。

是否有解决此问题的好方法?我还没有获得mysqlclient来与当前的设置很好地配合,并且宁愿不必根据0值跟踪所有调用并将其重组以处理Nonetypes。

使用相关模型进行编辑:

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-connector-python进行单独的查询会在查询集中产生0。

Django版本2.0.3.0,mysql-connector-python版本8.0.12。

2 个答案:

答案 0 :(得分:1)

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

'OPTIONS': {'use_pure': True }

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

答案 1 :(得分:-1)

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