2015-09-28 106 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