source

django 관리자가 필드를 NULL로 설정할 수 있도록 하려면 어떻게 해야 합니까?

gigabyte 2023. 1. 22. 22:28
반응형

django 관리자가 필드를 NULL로 설정할 수 있도록 하려면 어떻게 해야 합니까?

모델 필드를 다음과 같이 설정했습니다.null=TrueMySQL에서 NULL을 허용하지만 Django Admin을 통해 필드에 NULL을 할당할 수 없습니다.세팅도 해봤는데blank=True이 경우 필드는 빈 문자열로 설정됩니다.필드 값이 문자열인 "없음"으로 설정되었기 때문에 다음 작업도 수행되지 않았습니다.

좋은 생각 있어요?

덮어쓰기를 시도합니다.save()의 방법Model빈 값을 확인하려면:

class MyModel(models.Model):

    my_nullable_string = models.CharField(max_length=15, null=True, blank=True)

    def save(self, *args, **kwargs):
         if not self.my_nullable_string:
              self.my_nullable_string = None
         super(MyModel, self).save(*args, **kwargs)

문서의 이 섹션에서는 문자열 기반 필드를 다음과 같이 설정할 수 없습니다.NULL빈 문자열이 사용됩니다.장고는 이렇게 하는 거야.다른 유형의 필드에서도 사용할 수 있습니다.

관리 스크립트를 해킹하거나 데이터베이스에서 NULL일 필요가 없다고 판단해야 합니다.빈 문자열은 괜찮습니다.

이 코드를 사용해 보세요.여기에 있는 언어.subregion has null=True 이 코드는 관리 양식 설정(LanguageAdmin)을 덮어쓰고 "subregion" 필드 속성을 False로 설정합니다.

from app.models import Language
from django.contrib import admin

class Language(models.Model):
    subregion = models.ForeignKey(SubRegion, null=True)
    code = models.CharField(max_length=10, unique=True)

class LanguageAdmin(admin.ModelAdmin):

    def get_form(self, request, obj=None, **kwargs):
        form = super(LanguageAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['subregion'].required = False
        return form

admin.site.register(Language, LanguageAdmin)

보통 둘 다 합격하면null=True그리고.blank=Trueadmin에서 필드를 공백으로 두면Django사용하다NULL그 가치를 위해.

편집:

~하듯이agf그의 답변에서 이는 를 제외한 모든 유형에 해당된다고 설명합니다.CharField그리고.TextField.

관리자 전용으로 Django를 사용하는 경우가 많아 많은 NULL을 DB에 보존해야 합니다.이 스니펫을 사용하여 특정 객체의 모든 빈 문자열을 NULL로 설정합니다.

def save(self, *args, **kwargs):
    for var in vars(self):
        if not var.startswith('_'):
            if self.__dict__[var] == '':
                self.__dict__[var] = None
    super(MyModel, self).save(*args, **kwargs)

이것은 Django 2.0.1에서 수정되어 있습니다.이 버전부터 빈 값은 null 가능한 Charfields에 대해 None으로 저장됩니다.

티켓 : https://code.djangoproject.com/ticket/4136

커밋: https://github.com/django/django/commit/267dc4adddd2882182f71a7f285a06b1d4b15af0

언급URL : https://stackoverflow.com/questions/6993780/how-can-i-allow-django-admin-to-set-a-field-to-null

반응형