programing

빈 값을 정수 필드로 저장하는 방법

minimums 2023. 9. 15. 20:53
반응형

빈 값을 정수 필드로 저장하는 방법

나는 모든 유사한 스레드를 보고 문서를 읽고 많은 조합을 시도하여 다음과 같은 빈 값을 저장했습니다.IntegerFielddb에서 매번 실패했습니다.

MySQL을 사용하고 있습니다.

나의models.py정의하다 a.age=models.IntegerField()field. csv 파일에서 db를 채우면 값이 없는 셀도 있습니다.장고 문서에는 다음과 같이 나와 있습니다.

Field.null

If True, Django will store empty values as NULL in the database. Default is False.
Note that empty string values will always get stored as empty strings, not as NULL. 

저랑 같이 일하니까요.IntegerField빈 문자열(csv의 빈 셀)을 다음과 같이 저장합니다.NULLdb. 따라서 추가해야 할 것 같습니다.null=True에게age사실 나는 이것보다 더 시도해 보았습니다.

age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)

DB에 빈 문자열을 삽입할 때마다

ValueError: invalid literal for int() with base 10: ''

내가 또 뭘 할 수 있을까요?

문자열은 정수가 아니며 빈 문자열은 정수가 아닙니다.None아니면NULL. 필드가 비어 있는 인스턴스를 잡아 다음으로 캐스트해야 합니다.None.

foo = "something" # "something" is coming from your CSV file

try:
   val = int(foo)
except ValueError:
   # foo is something that cannot be converted to
   # a number. It could be an empty string, or a
   # string like 'hello'
   # provide a default value
   val = None

# Now use val to insert into the database
f = MyModel()
f.age = val
f.save()

blank 는 엄격하게 프론트 엔드 검증을 위한 것이며 데이터베이스 측면에는 아무런 영향을 미치지 않습니다.

이것은 다음과 다릅니다.null.null순수하게 데이터베이스와 관련된 반면에blank유효성 검사와 관련이 있습니다.필드가 있는 경우blank=True, 폼 유효성 검사를 통해 빈 값을 입력할 수 있습니다.필드가 있는 경우blank=False, 필드가 필요합니다.

null 반면에, 는 데이터베이스와 관련이 있습니다.

True이면 Django는 빈 값을 NULL로 데이터베이스에 저장합니다.기본값은 False입니다.

IntegerField는 정수로 변환할 수 있는 값이 필요하므로 문자열을 전달할 때 해당 값을 캐스트할 수 없고 예외가 발생합니다.대신에 지나가시면.None,그리고 당신은 그렇게 했어요.age = models.IntegerField(null=True), 그것은 올바르게 보관하는 것을 알고 있습니다.

요약하자면:

  • age = models.IntegerField()

    필드는 필수이며 올바른 정수 값이 필요합니다.수락하지 않습니다.None데이터베이스에 null 값이 없습니다.유효한 값은 -2147483648 ~2147483647입니다.

  • age = models.IntegerField(null=True)

    필드가 필요합니다(양식 유효성 검사).필드에 있는 경우None가치로서, 그것은 다음으로 번역될 것입니다.NULL데이터베이스에 저장됩니다.

  • age = models.IntegerField(blank=True, null=True)

    필드가 필요하지 않습니다(양식 유효성 검사).필드가 전달된 경우None, 로 번역될 것입니다.NULL

  • age = models.IntegerField(blank=True)

    필드가 필요하지는 않지만(양식 유효성 검사), 데이터베이스가 null을 허용하지 않으므로 유효한 정수 값을 전달해야 합니다.일반적으로 여기서 기본값은 다음과 같습니다.default=0또는 값을 명령에 제출하기 전에 검증을 수행해야 합니다.

None 있지 않은 이에지은열어'열은지o에 '

폼 클래스에서 'clean' 메서드를 재정의한 다음, 빈 문자열이 제출되지 않도록 정수 데이터를 클리닝할 수 있습니다. 아래 예제를 참조하십시오.

def clean(self):
    self.cleaned_data = super(YourForm, self).clean()
    if self.cleaned_data['age'] == '': self.cleaned_data['age'] = None
    return self.cleaned_data

언급URL : https://stackoverflow.com/questions/20399717/how-to-store-empty-value-as-an-integerfield

반응형