저는 응용 프로그램 논리에 사용되는 두 개의 클래스가 있습니다. 하나는 Direction이라고하고 다른 하나는 Compass라고 부릅니다. 방향은 나침반의 구성원입니다. 구현하고자하는 것은 Direction 클래스를 래핑하고 model 클래스의 멤버로 사용할 수있는 modelField입니다. DirectionField 클래스는 models.CharField를 상속 받아 부모 클래스의 선택 항목을 설정합니다.Django는 models.CharField에서 선택을 통해 오류를 제공합니다.
많은 다른 클래스에서 DirectionField를 사용할 수 있고 유지하기가 쉽기 때문에이 디자인이 좋다고 생각합니다. 그러나 장고의 관리자 페이지에 나침반 모델을 저장하면 오류가 발생합니다. 오류는 입니다. "유효한 값이 아닙니다."
저는 파이썬 2.7과 장고 1.4를 사용합니다.
누군가가이 문제를 검토하고 문제가 무엇이며 어떻게 해결할 수 있는지 제안 해주십시오. 내가 저장할 때 나침반 관리 페이지 (또는 양식보기)에서
class Direction():
choices = (('N','North'),
('S','South'),
('E','East'),
('W','West'),)
def __init__(self, value=None):
self.value = value
class DirectionField(models.CharField):
def __init__(self, *args, **kwargs):
super(DirectionField, self).__init__(choices=Direction.choices,
*args, **kwargs)
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if isinstance(value, Direction) or value is None:
return value
return Direction(value)
def get_prep_value(self, value):
return value.value
class Compass(models.Model):
name = models.CharField(max_length=20)
direction = modelFields.DirectionField(max_length=10)
class Meta:
db_table = 'campass'
def __unicode__(self):
return "%s/%s" % (self.name, self.direction)
class CompassForm(forms.ModelForm):
class Meta:
model = Compass
def clean(self):
return self.cleaned_data
오류 내가 얻을 : 당신이 추가 할 필요가
Value <src.bo.tgEnum.Direction instance at 0x03E97E18> is not a valid choice.
왜 cleaned_data 값을 얻기 위해 CompassForm에서 super를 호출하지 않는 이유가 있습니까? cleaned_data = super (CompassForm, self) .clean() – Paulo