django从3个模型中查询

时间:2014-01-22 19:19:33

标签: python django django-models

我的模特是:

模型1:

class source_of_enquiry(models.Model):
    source_of_enquiry = models.CharField(max_length=200, null=True, blank=True)

    def __unicode__(self):
        return '%s' % self.source_of_enquiry

模型2:

class customers(models.Model):
    cutomer_name = models.CharField(max_lentgth=200) 
    customer_src_n_type = models.Foreign_key(source_of_enquiry)
    customer_contact = models.CharField(max_lentgth=200) 

    def __unicode__(self):
        return '%s' % self.customer_name

模型3:

class sales_cycle(models.Model):
    item_name = models.CharField(max_length=200) 
    customer_name = models.Foreignkey(customers)

    def __unicode__(self):
        return '%s' % self.item_name

我怎么知道根据询问来源完成了多少销售?

尝试了许多来自`select_related'和'prefetch_selected',但都是kaput。

1 个答案:

答案 0 :(得分:1)

首先 - python命名约定声明类不应该有下划线而是更喜欢大写字母。所以你的模型应该是SourceEnquiry,Customer(不是复数)和SaleCycle。

话虽如此,让我说我有一个SourceEnquiry项目(我将任意选择一个),你想要所有相关的SaleCycle项目,你这样做:

>>> sinq = SourceEnquiry.objects.get(pk=1)
>>> SaleCycle.objects.all().filter(customer_name__customer_src_n_type=sinq)

<强> P.S。

另外,回到命名约定的事情,在Customer类中使用customer作为字段名称的一部分是多余的。你知道它是一个客户对象,所以最好这样命名:

class Customer(models.Model):
    name = models.CharField(max_lentgth=200) 
    src_n_type = models.Foreign_key(source_of_enquiry)
    contact = models.CharField(max_lentgth=200)

你的其他领域也可以更清洁:

class SourceEnquiry(models.Model):
    value = models.CharField(max_length=200, null=True, blank=True)

class SaleCycle(models.Model):
    item = models.CharField(max_length=200) 
    customer = models.Foreignkey(Customer)