2014-09-19 3 views
0

모델 :ModelForm 인스턴스 - 예기치 않은 동작이

class Person(Models.model): 
    name = models.CharField(max_length=50) 
    father = models.ForeignKey('Person', related_name="father", null=True, blank=True) 
    mother = models.ForeignKey('Person', related_name="mother", null=True, blank=True) 

폼 :

class MyForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    instance = getattr(self, 'instance', None) 
    if instance and instance.pk: 
     if instance.name !='': 
     self.fields['name'].widget.attrs['readonly'] = True 

     logger.debug("father %s" % instance.father.all()) 

    class Meta: 
    model = Person 
    fields = ('name') 

내 의도는 인스턴스가 아버지가 있는지 확인하는 것입니다, 그래서 logger.debug를 추가, 무엇을 볼 수 instance.father.all()에있다 (나는 그것이 아니면 그렇지 않느냐는 확실하지 않았다).

로그를 살펴보면 instance.father.all()은 인스턴스 사람의 아버지를 갖지 않지만 아버지는 인스턴스 사람입니다.

명확히하기 위해, Person Person이 저라고 가정 해 봅시다. 나는 아버지를 얻고 싶지만, 나는 아이들을 낳는다. (나는 아버지가있는 사람을 얻는다.)

나는 아주 좋아한다. (나는 나중에 사용할 것이다.) 그러나 나는 여전히 어떻게 아버지를 얻는 지 모른다. 인스턴스 사람 ... 어떤 아이디어? 다음 줄에

답변

1

는 :

logger.debug("father %s" % instance.father.all()) 

당신은 관련 이름 father를 호출하면 자연스럽게이 사람의 모든 자식을 얻는다.

관련 이름을 다른 것으로 변경하십시오 (예 : fathers_childrenmothers_children). 혼란스럽지 않도록하십시오.

예를 들어 사람의 아버지를 만나고 싶다면 다음과 같이하십시오. Person 클래스의 현재 인스턴스 인 경우 다음 줄을 시도해야합니다.

logger.debug("father %s" % instance.father) 

개체를 반환합니다.

는 또한 수행 할 수 있습니다

logger.debug("father %s" % instance.father_id) 

는 아버지의 ID를 얻을 수 있습니다. 좋네요

은 다음과 같이 문자열을 포맷하는 것입니다 : 아이가 하나의 아버지와 하나의 어머니,하지만 아버지 (또는 어머니) 많은 아이들이있을 수있을 수 있습니다

logger.debug('father {0}'.format(instance.father)) 

. 따라서 instance.father.all()과 같은 호출은 많은 의미를 갖지 않습니다. 그것은 오직 하나 뿐인 아이의 모든 아버지를 얻는 것과 같습니다.

+0

정확하게 (빠른 읽기가 틀립니다; D) –

+0

무엇을 빨리 읽었습니까? 나는 단지 궁금하다. 그럼에도 불구하고 우리는 신속하게 해결책을 찾았습니다. 또한 대답을 확인하고 오타 및 약간의 문법 오류를 수정했습니다. – cezar

+0

처음에 당신의 대답을 읽고 해결책을 찾지 못했습니다. (단지 코드를 읽었습니다.) 당신의 설명을 놓치고 쓸데없는 대답을보십시오. 그 후에 나는 그것을 다시 읽었지만 전체를 보았습니다. 아주 좋은 설명입니다. 그래서 나는 가난한 대답을 제거하고 당신의 것을 표시합니다. –