【发布时间】:2018-06-28 21:50:02
【问题描述】:
Django 的 ORM 只是不适合我,但我打算用周末的时间阅读 documentation 以使其点击。
同时,我有一个我无法解决的问题。
我第一次在这里,通过提供的答案解决了:
ValueError: invalid literal for int() with base 10 seems to be related to ForeignKey
我已将查询修改为:
# data['product_id] = 78
# returns A_17
product_code = Products.objects.get(id=data['product_id']).code
# this is where the error occurs
print(ProductPositions.objects.filter(product_code__code=product_code))
/mnt/c/dev/current/client/.venv/client/lib/python3.6/site-packages/pymysql/cursors.py:166:警告:(1292,“截断不正确的DOUBLE值:'A_15 '")
结果 = self._query(查询)
我什至不确定它为什么要查看 A_15,因为它应该只过滤 A_17,所以这是我不明白的一个问题
解释这些表格是因为我认为它不是很直观。 Products 看起来像这样(删除了与此无关的列):
-- Products table
id code
--------------
77 A_16
78 A_17
81 M_15
ProductPositions 中有多个code。 code 更像是一个产品线,而product_no(我还没有完成,是下一步)是该系列的产品。最终,我试图获取描述,但目前仅在过滤A_17 时。所以它看起来像:
-- ProductPositions table
product_code product_no description
-------------------------------------------------
A_17 ABC123 Widget 1
A_17 DEF456 Widget 2
A_17 GHI789 Widget 3
A_16 ABC123 Widget 1
A_16 DEF456 Widget 2
A_16 GHI789 Widget 3
这些是每个的模型:
class Products(models.Model):
id = models.AutoField(primary_key=True)
code = models.CharField(unique=True, max_length=16)
name = models.CharField(max_length=255, blank=True, null=True)
short_name = models.CharField(max_length=128)
class ProductPositions(models.Model):
product_code = models.ForeignKey(Products, db_column='product_code', null=False)
product_no = models.DecimalField(unique=True, max_digits=12, decimal_places=1, primary_key=True)
product_title = models.CharField(max_length=255)
product_description = models.TextField()
def __str__(self):
return self.product_description
class Meta:
db_table = 'Product_Positions'
unique_together = ('product_code', 'product_no')
此外,它似乎可能是数据库生成的错误。但是,当我在./manage.py shell 中执行以下操作以查看原始 SQL 查询列表时,什么都没有出现(只有一个连接并且没有命名):
>>> from django.db import connection
>>> connection.queries
[]
不管怎样,最终还是想联系ProductPositions.objects.filter(product_code__code=product_code).filter(product_no=data['product_no'].description,但每走一步都遇到问题。
要明确这个问题:一个字符串被传递到varchar 字段,但错误又返回double。为什么?
【问题讨论】:
-
"A_17" 不是数字,它是一个字符串。你不能从中得到双倍。
-
没错。
product_code = 'A_17'和它被用作过滤参数的字段显然也是一个字符串,那么这个DOUBLE业务是关于什么的?
标签: python mysql django django-models mariadb