2014-11-02 80 views
0

我奋力想学Django的查询对两种型号:Django的关系查询

class Invoice(models.Model): 
    contact = models.ForeignKey(Contact) 
    dateCreated = models.DateTimeField(auto_now_add=True) 
    jobName = models.CharField(max_length=30) 
    jobAddress = models.CharField(max_length=30, blank=True) 

class Contact(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    address = models.CharField(max_length=30) 

我试图复制以下查询:

SELECT * 
FROM invoice, contact 
WHERE invoice.contact_id = contact.id 
AND invoice.id = 5 

任何帮助,将不胜感激。

+2

请通过教程。这是一个非常简单的查询 - 对于初学者,你可以做一个'.get(id = 5)' – karthikr 2014-11-02 03:24:15

+0

我确实尝试过这个教程,但它已经躲过了我。我试过 data = Invoice.objects.get(pk = id) 但我只是不明白如何关联联系人字段以获得联系人信息以及(地址等) – Mike 2014-11-02 03:57:52

+0

你会做invoice.contact访问外键。点表示访问外键字段 – karthikr 2014-11-02 04:32:27

回答

1

所以基本上你想要的是发票的所有信息以及ID为5的发票的相关联系人;要做到这一点:

# Fetch the invoice with id = 5 
invoice = Invoice.objects.get(id=5) 

现在,获取有关的相关联系人,只需“跟随”外键:

print(invoice.contact.first_name) 
print(invoice.contact.last_name) 
+0

谢谢。这是我需要的提示。现在完美工作。 – Mike 2014-11-02 12:39:20

-2
Contact.invoice_set.filter(id=5) 
2

你宁愿设置你的模型以这样的方式(联系人,再发票..)

class Contact(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    address = models.CharField(max_length=30) 

class Invoice(models.Model): 
    contact = models.ForeignKey(Contact, related_name="contact_invoice") 
    dateCreated = models.DateTimeField(auto_now_add=True) 
    jobName = models.CharField(max_length=30) 
    jobAddress = models.CharField(max_length=30, blank=True) 

那么这个查询:

contact = Contact.objects.get(id=someid)#just to get first contact object 

contact_address = contact.address 
contact_firstname = contact.first_name 
contact_lastname = contact.last_name 
invoice_of_this_contact = contact.contact_invoice.get(id=5)