我的模特是:
模型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。
答案 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)