2015-09-28 105 views
0

我正在構建一個涉及人員列表和他們所做交易的項目。每個人將擁有自己的個人資料,交易金額爲x。使用其他模型的名稱查詢Django模型

我的數據庫,到目前爲止,包括兩種型號:

之一來定義一個人

class Person (models.Model): 
    """ 
    A person 
    """ 

    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=100, blank=True) 

    def __unicode__(self): 
     return self.name 

一到每個人提出的交易相關聯。

class Purchase (models.Model): 
    """ 
    A purchase for each person 
    """ 
    person_id = models.ForeignKey(Person) 
    purchase_description = models.CharField(max_length=1000, blank=True) 

我確定這是一個多對一的數據庫關係,因爲有些人可能會做同一事務。

現在,我可以爲每個人製作頁面,在標題中顯示他們的名字。我想要做的是顯示對該特定人員進行的交易。如何才能做到這一點?以下是我的view.py文件的樣子:

from django.shortcuts import render 
from .models import Person, Purchase 

def load_person(request, name): 

    person = Person.objects.get(name=name) 

    # name = Purchase.objects.filter(purchase) 

    context = { 
     'name': name 
     # 'purchase': purchase 
    } 

    return render(request, 'pages/person.html', context) 

以下是與我的url.py文件中的查詢關聯的網址。

url(r'^project/(?P<name>[-\w]+)/$', views.load_person), 
+0

使用'person_id'作爲您的字段名稱,在您的數據庫中,您將獲得'person_id_id',因爲django使用'Person'對象查詢並將其映射到對象的pk(或id)。所以當你創建一個模型類時,你應該使用(在這種情況下)'person',它將在你的數據庫中反映爲'person_id'。 – Gocht

+0

感謝您的建議。我想知道爲什麼我在錯誤消息中看到person_id_id。 – AldoTheApache

回答

1
person = Person.objects.get(name=name) 
purchases = Purchase.objects.filter(person_id=person) 

聽起來你使用Django剛開始,有幾件事情是不是最好的做法,它們分別是:

  1. 你不需要在Person定義id,Django會爲你定義它。
  2. 儘量不要使用person_id作爲字段名稱,而應使用person。 Django模型不是關係數據庫設計,將模型想象成獨立的實體。
+0

我是Django的新手,不知道包含ID字段是不好的做法。我很欣賞這些反饋並進行了修改。你的建議以及返回一個字符串並在我的模板中創建一個for循環給了我需要的結果。謝謝你的幫助! – AldoTheApache