mysql – Django Model在保存之前检查数据类型的完整性

我有一个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 ...""")
点赞