2010-10-16 57 views
0

我有Django的表像下面的(我已經刪除非必要的字段):查詢整個數據庫表

class Person(models.Model): 
    nameidx = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=300, verbose_name="Name")  
class Owner(models.Model): 
    id = models.IntegerField(primary_key=True) 
    nameidx = models.IntegerField(null=True, blank=True) # is Person.nameidx 
    structidx = models.IntegerField() # is PlaceRef.structidx 
class PlaceRef(models.Model): 
    id = models.IntegerField(primary_key=True) 
    structidx = models.IntegerField() # used for many things and not equivalent to placeidx 
    placeidx = models.IntegerField(null=True, blank=True) # is Place.placeidx 
class Place(models.Model): 
    placeidx = models.IntegerField(primary_key=True) 
    county = models.CharField(max_length=36, null=True, blank=True) 
    name = models.CharField(max_length=300) 

我的問題如下。如果在我的views.py文件中,我有一個由名稱引用的Person,並且我想查找它們擁有的所有地方作爲QuerySet,我該怎麼辦?

我能多遠這樣的:

person = Person.objects.get(name=name) 
owned_relations = Owner.objects.filter(nameidx=nameidx) 

我如何從這裏到什麼地方呢?我應該使用數據庫方法嗎?

我也不確定我是否應該使用ForeignKey來處理Owner.nameidx。

非常感謝這位非常基本的問題並對此表示歉意。我不知道如何學習數據庫查詢的基礎知識,除了通過嘗試,失敗,問,就重新嘗試... :)

回答

1

外鍵的整點是像你的使用。如果您已經知道Owner.nameidx引用了Person,爲什麼不將它作爲Person表的外鍵(或OneToOne字段)呢?你不僅得到引用完整性的優勢 - 這使得它不可能輸入nameidx的值不是一個有效的人 - Django的ORM會給你「關注」的關係很容易的能力:

owned_places = Place.objects.filter(placeref__owner__person=my_person) 

將爲您提供my_person所有的所有地點。順便說一句,你不需要定義單獨的主鍵字段 - Django會爲你做,並使它們成爲自動增量字段,這幾乎總是你想要的。

+0

感謝您的明確解釋 - 這將讓生活更輕鬆:) – AP257 2010-10-17 10:59:35

0

如果ü可以redesign.Then

In owner nameidx can be a foreign key to Person(nameidx) 
Placeref(structidx) could be a foreign key to Owner(structidx) and 
Place(placeidx) could be a foreign key Place ref(placeidx) 

然後ü可以推斷該地方的價值很容易..