2013-11-15 28 views
1

我有一個名爲RestaurantDjango的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,因爲引擎將爲這兩個模型使用相同的主鍵。例如,在我的情況下,我有RestaurantPlaceOneToOneRelationship。如果我們使用Place作爲Restaurant的主鍵,則從地點對象創建的餐廳對象將共享相同的pk,從而搞砸了Restaurant.objects.get(pk=)

刪除主鍵規則解決我的問題:

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

我不能在別的地方找到這些信息,所以我在這裏張貼。希望它可以幫助別人。

相關問題