gpt4 book ai didi

mysql - Django 模型在保存前检查数据类型的完整性

转载 作者:可可西里 更新时间:2023-11-01 07:38:28 27 4
gpt4 key购买 nike

我有一个 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)

我想做一个简单的原始 SQL 查询,例如:

insert into mymodel (name, product_count, paid_amount) values (%s, %s, %s);

现在我知道我可以直接使用 Django 模型执行此操作,但请让我们认为我被迫使用原始 SQL 执行此操作(而且我的真实查询与这个非常不同,我是只是举个例子来说明我的情况)。

现在,我想在原始 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()方法?

最佳答案

您可以使用一个表单,用数据填充它并检查它是否有效。

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 ...""")

关于mysql - Django 模型在保存前检查数据类型的完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com