2013-11-15 2 views
1

내가 Restaurant장고 Model.objects.all()와 Model.objects.get (PK =?)를 돌려 두 개의 서로 다른 결과

class Restaurant(models.Model): 
    place = models.OneToOneField(Place, primary_key=True) 
    serves_pizza = models.BooleanField() 
    serves_hotdog = models.BooleanField() 

    def __unicode__(self): 
     return u'%s the restaurant' % self.place.name 

Restaurant.objects.all()와 쿼리 및 Restaurant.objects.get()는 두 개의 서로 다른 결과를 얻을 수라는 기본 모델이 전자가 맞습니다.

# this is correct 
>>> r=Restaurant.objects.all() 
>>> r 
[<Restaurant: Hogwarts the restaurant>, <Restaurant: Domino the restaurant>] 
>>> r[0].serves_hotdog 
True 

# this is not correct 
>>> r0=Restaurant.objects.get(pk=4556376185503744) 
>>> r0.serves_hotdog 
False 

# although they have the same pk 
>>> r0.pk == r[0].pk 
True 
# their property values are different 
>>> r[0].serves_hotdog == r0.serves_hotdog 
False 
>>> r[0].serves_pizza == r0.serves_pizza 
False 

누구나 이와 비슷한 것을 보았습니까?

+0

당신은 그들이 동일한 pk를 가지고 있는지 확신합니까? 'r0 == r [0]'을'r0.pk == r [0] .pk'로 변경해 보셨습니까 –

+0

예. 'r0.pk == r [0] .pk'는 True를 반환합니다. –

+0

언제든지 개체를 수정 했습니까? –

답변

2

GAE에서 Django-nonrel을 사용하는 경우 엔진에서 두 모델에 대해 동일한 기본 키를 사용하므로 관련 모델에 primary_key=True을 설정하지 않았는지 확인하십시오. 예를 들어, 제 경우에는 Restaurant이고 PlaceOneToOneRelationship입니다. Restaurant의 기본 키로 Place을 사용하면 place 객체에서 생성 된 레스토랑 객체가 동일한 pk를 공유하므로 Restaurant.objects.get(pk=)이 엉망입니다. 내가 다른 곳에서이 정보를 찾을 수 없습니다

class Restaurant(models.Model): 
    place = models.OneToOneField(Place) # no primary_key=True 

, 그래서 내가 여기를 게시하도록하겠습니다 : 기본 키 규칙을 삭제

내 문제를 해결합니다. 다른 사람들을 돕기를 바랍니다.