1

私はと呼ばれる基本的なモデルを持っていますRestaurant

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()、前者のみが正しい 2 つの異なる結果が得られます。

# 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

誰もこれに似たものを見たことがありますか?

4

1 に答える 1

2

primary_key=TrueGAE で Django-nonrel を使用している場合は、エンジンが両方のモデルで同じ主キーを使用するため、関連するモデルを設定しないようにしてください。たとえば、私の場合、私はRestaurantPlaceを持っていOneToOneRelationshipます。Placeの主キーとしてを使用するRestaurantと、場所オブジェクトから作成されたレストラン オブジェクトが同じ pk を共有するため、 が台無しになりRestaurant.objects.get(pk=)ます。

主キー ルールを削除すると、問題が解決します。

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

この情報は他では見つけられないので、ここに投稿します。それが他の誰かに役立つことを願っています。

于 2013-11-15T12:54:12.507 に答える