gpt4 book ai didi

Django:自动将模型字段中的空字符串设置为无?

转载 作者:行者123 更新时间:2023-12-03 10:23:10 24 4
gpt4 key购买 nike

我想在 Django 模型中迭代我的模型字段,并检查它们是否为空字符串,并以编程方式在模型 save() 方法中用 null 替换它们。这是因为某些 CharFields 需要唯一或没有值。

例子:

class Person(models.Model):
name = models.CharField(blank=True, unique=True, null=True)
nick_name = models.CharField(blank=True, unique=True, null=True)
...
age = models.IntegerField()

def save(self, *args, **kwargs):
for field in self._meta.fields: # get the model fields
if field=='':
field = None
super(Person, self).save(*args, **kwargs)

上面提示一个 creation_counter 不清楚为什么尝试将这些值而不是字段值与空字符串进行比较。

这可以手动完成,但我有太多模型......

有什么建议?

编辑:
感谢所有试图帮助我的人! :D

Jazz 发布了似乎对我有用的解决方案,但他的代码没有出现在他的帖子中。这是我的版本,它本质上是相同的,但有一个额外的检查,以确保我们只在必要时覆盖:
from django.db.models.Field import CharField as _CharField

class CharField(_CharField):
def get_db_prep_value(self, value, *args, **kwargs):
if self.blank == self.null == self.unique == True and value == '':
value = None

return super(CharField).get_db_prep_value(value, *args, **kwargs)

最佳答案

在您的情况下,我建议使用自定义模型字段,它是 CharField 的子类。并确保将空字符串转换为 None -- 覆盖 get_db_prep_value应该这样做。

class EmptyStringToNoneField(models.CharField):
def get_prep_value(self, value):
if value == '':
return None
return value

class Person(models.Model):
name = EmptyStringToNoneField(blank=True, unique=True, null=True)
nick_name = EmptyStringToNoneField(blank=True, unique=True, null=True)

https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

关于Django:自动将模型字段中的空字符串设置为无?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7059235/

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