我有一个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上插入三个变量,但是对于每个变量我想检查数据类型,所以在调用数据库insert
之前,我想使用我的Django
用于检查其类型的模型:
name
变量是否实际为字符串(也许它不会传递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()
方法的内容吗?
答案 0 :(得分:1)
您可以使用表单,用数据填充它并检查它是否有效。
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 ...""")