【发布时间】:2020-10-10 04:05:13
【问题描述】:
我决定审查我的 Django 应用程序,并在我的模型中发现了一些问题。
我的问题与 CharField 空白和空选项有关。
我正在阅读有关 Django 的最佳实践的信息,但我刚刚发现我做错了所有事情。这里的许多帖子都解释了我们不应该同时在 CharField 上使用空白和空选项。为了遵守规则,我删除了 null=True 并只保留了空白=True
这是我的疑问:我正在从网络抓取代码填充我的数据库。有时 CharField 选项从网站返回为 None 并且当我的代码尝试将其发送到数据库时(我没有在 Forms 中这样做)我收到 Invalid Format 错误,告诉我我不应该使用 None - 因为我拿了null=True。
我已经阅读了一些关于它的资料并想出了一个解决方案,我在此展示它以听取你们的意见,男孩/女孩。这是最好的方法吗?对于这种非常常见的情况,我觉得 Django 可能有一些开箱即用的东西。
class Empresa(models.Model):
#I've chosen just some fields to keep it simple
userstelegram = models.ManyToManyField(UserTelegram, blank=True)
nome = models.CharField(max_length=150, blank=True)
denominacao_social = models.CharField(max_length=150, blank=True)
setor_atividade = models.CharField(max_length=150, blank=True)
categoria_registro = models.CharField(max_length=100, blank=True)
cnpj = models.CharField(max_length=100, blank=True)
coberta = models.BooleanField(default=True)
def save(self, *args, **kwargs):
self.full_clean(
exclude = [
'nome',
'denominacao_social',
'setor_atividade',
'categoria_registro',
'cnpj',
]
) # performs regular validation then clean()
super(Empresa, self).save(*args, **kwargs)
def clean(self):
self.cnpj = str(self.cnpj or '').strip()
self.categoria_registro = str(self.categoria_registro or '').strip()
self.setor_atividade = str(self.setor_atividade or '').strip()
self.denominacao_social = str(self.denominacao_social or '').strip()
self.nome = str(self.nome or '').strip()
def __str__(self):
return self.nome if self.nome != None else self.denominacao_social
两个额外的问题:
1 - 我将 self.full_clean() 与 exclude 参数一起使用,因此验证器不会在带有 None 的 CharField 上触发错误。这是正确的方法吗?
2 - full_clean 函数是否在所有字符串字段上使用 strip()?由于我从 full_clean 中排除了我的 CharFields,我应该在 clean 函数上使用条带吗?
谢谢各位!
【问题讨论】:
标签: python django validation