【问题标题】:Need some help for creating django field validation in model在模型中创建 django 字段验证需要一些帮助
【发布时间】:2017-11-01 16:42:48
【问题描述】:

我正在尝试验证这个 BaseProduct 模型,但我对此感到很震惊,有人可以帮我看看吗?是否可以验证? 有什么有效的解决办法吗?

我需要验证CharFiled, DecimalField and ImageField

models.py

class BaseProduct(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    type = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=6)
    image = models.ImageField(upload_to='', blank="")


    def __str__(self):
        return '%s' % (self.name)

【问题讨论】:

  • 不,您不需要验证CharField、DecimalField 和ImageField!如果您必须验证某些内容,那么就是您定义的字段,无论是name、price、image。我们来看看:image 是可选的,你想在这里验证什么? price 不应该有一个字符串作为默认值,也不能是一个空字符串。
  • 嗨,@cezar 感谢回复,我需要验证姓名、最大长度、最大数字、图像、选择。
  • 不,您不需要验证。这就是你使用框架的原因。 Django 负责验证。
  • 我如何在这里写方法保存和清理,
  • @cezar 为什么你说 charfield 不需要验证?由于 CharField 可以有任何字符,您需要根据字段的用途来控制输入,即只有字母字符。我不是想争论我只是好奇。 (我知道字段定义为您提供了主要验证)。

标签: django python-3.x validation django-models


【解决方案1】:

验证是什么意思?您可以进行各种验证,some come built in django 或者您可以编写自己的验证,具体取决于您期望的输入类型

当您的选择最多 5 或 6 个字符时,您的模型定义中还有 type = models.CharField(max_length=200。

也许这是一个更好的方法:

PRODUCT_TYPE = (
    ('n', 'Normal'),
    ('c', 'Combo'),
)

type = models.CharField(max_length=1#...`

编辑

正如@cezar 指出的那样,字段定义为您提供了主要的验证,就像 CharField 一样:

models.CharField(max_length=200) 将验证输入是 最大长度为 200 个字符的字符串。它会抛出一个错误 如果输入不是字符串,或者是长度超过 200 的字符串 字符

【讨论】:

  • 嗨,Guillermo,感谢回复,我需要验证姓名、最大长度、最大数字、图像、选择
  • 为什么投反对票? CharFields 可以有各种自定义验证,因为它接受任何字符。如果我需要排除名字和姓氏的数字字符怎么办?
  • 我没有投反对票。我无权给予。那么,有没有办法为这个模型调用保存和清理方法
  • @KumarKrishnappa 我知道你没有,但除了我的回答,我无法发表评论。我只是想知道我的回答有什么问题。
  • 嗨@guillermo chamorro,你能帮忙写一下这个模型的get_absolute_url方法吗?
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 2011-03-25
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2012-03-18
  • 2012-04-30
相关资源
最近更新 更多