Django 모델 내 모델 필드를 반복 실행하고 빈 문자열인지 확인하고 model save() 메서드의 null을 프로그래밍 방식으로 바꿉니다. 이는 일부 CharField가 고유하거나 값이 필요하지 않기 때문입니다.Django : 모델 필드의 빈 문자열을 None으로 자동 설정 하시겠습니까?
예 :
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
나에게 맞는 솔루션은 재즈가 게시하지만 그의 코드는 그의 게시물에 나타나지 않습니다. 이것은 본질적으로 동일하다 내 버전이지만, 별도의 검사와 필요에 있는지 우리는 재정의 할 :
귀하의 경우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)
_meta.fields은 아마 모델 필드 이상이 포함되어 있습니다. 개별 필드에서이 작업을 성공적으로 시도해 보셨습니까? 또한 정확한 오류 메시지는 무엇입니까? – Ted