我有一个Django项目,我被迫做一个原始的SQL查询(所以不使用模型来保存这些信息),但我仍然想检查这个查询的一些参数的正确性或数据类型.假设我有这个模型:
class MyModel(Model):
name = models.CharField(max_length=768)
product_count = models.PositiveIntegerField(null=True, blank=True)
paid_amount = models.DecimalField(decimal_places=2, blank=True)
我想做一个简单的Raw SQL查询,如:
insert into mymodel (name, product_count, paid_amount) values (%s, %s, %s);
现在我知道我可以直接用Django模型做到这一点,但是请让我们认为我被迫用原始SQL做这个(我的真实查询与这个非常不同,我只是提供一个例子来揭露我的情况).
现在,我想在我的Raw SQL上插入三个变量,但是对于每个我要检查数据类型的变量,所以在调用数据库插入之前,我想使用我的Django模型来检查它的类型:
>检查我的名称变量是否实际上是字符串(也许它不会传递768个字符,但只检查字符串是否正常).
>检查我的product_count变量是否为正整数.
>检查我的paid_amount是否为十进制数.
如果会是这样的话,我会很高兴:
m = MyModel(name=name, product_count=product_count, paid_amount=paid_amount)
if m.check_types(): # that could give an error if some of the fields are wrong.
cursor.execute("""insert into mymodel (name, product_count, paid_amount) values (%s, %s, %s ...
...
Django有类似check_types()方法的东西吗?
最佳答案 您可以使用表单,用数据填充它并检查它是否有效.
class MyModel(Model):
name = models.CharField(max_length=768)
product_count = models.PositiveIntegerField(null=True, blank=True)
paid_amount = models.DecimalField(decimal_places=2, blank=True)
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['name', 'product_count', 'paid_amount']
然后,您的代码看起来像:
data = {'name': name, 'product_count': product_count, 'paid_amount': paid_amount }
model_form = MyModelForm(data)
if model_form.is_valid():
cursor.execute("""insert into mymodel ...""")