rgm
rgm

Reputation: 1281

django querying from 3 models

My models are :

model 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

model 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

model 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

how should i know how many sales had peen completed based on source of enquiry??

tried many from `select_related' and 'prefetch_selected' , but all were kaput.

Upvotes: 0

Views: 74

Answers (1)

yuvi
yuvi

Reputation: 18457

First of all - python naming convention state that classes should not have underscores and prefer upper-case letters instead. So your models should be SourceEnquiry, Customer (not plural) and SaleCycle.

That being said, let's say I have a SourceEnquiry item (I'm going to pick one arbitrarily), and you want all related SaleCycle items, you do it like so:

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

p.s.

also, going back to the naming convention thing, it's redundant to use customer as part of a field name inside the class Customer. You alread know it's a customer object, so it's better to name it like so:

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)

You other fields can also be cleaner:

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)

Upvotes: 1

Related Questions