1 | from django.db import models
|
---|
2 |
|
---|
3 | class Company(models.Model):
|
---|
4 | name = models.TextField(max_length=500, unique=True, verbose_name='Company Name')
|
---|
5 | locations = models.ManyToManyField(Location, through="CompanyLocation")
|
---|
6 | record_status = models.TextField(max_length=25, unique=True, verbose_name='Record Status')
|
---|
7 |
|
---|
8 | class Location(models.Model):
|
---|
9 | name = models.TextField(max_length=500, unique=True, verbose_name='Location Name')
|
---|
10 | record_status = models.TextField(max_length=25, unique=True, verbose_name='Record Status')
|
---|
11 |
|
---|
12 | class CompanyLocation(models.Model):
|
---|
13 | company = models.ForeignKey(Company, on_delete=models.CASCADE)
|
---|
14 | location = models.ForeignKey(
|
---|
15 | Location, on_delete=models.CASCADE, related_name="companies"
|
---|
16 | )
|
---|
17 | record_status = models.TextField(max_length=25, unique=True, verbose_name='Record Status')
|
---|
18 |
|
---|
19 | class Meta:
|
---|
20 | unique_together = ["company", "location"]
|
---|
21 |
|
---|
22 |
|
---|
23 | # QuerySet w/ Prefetch Example:
|
---|
24 | queryset = (
|
---|
25 | models.Company.objects
|
---|
26 | .prefetch_related(
|
---|
27 | # Only active Locations
|
---|
28 | Prefetch(
|
---|
29 | "locations",
|
---|
30 | queryset=models.Location.filter(record_status="Active")
|
---|
31 | .extra(where=["demo_companylocation.record_status='Active'"]),
|
---|
32 | ),
|
---|
33 | )
|
---|
34 | .all()
|
---|
35 | # Only active Companies
|
---|
36 | .filter(record_status="Active")
|
---|
37 | .order_by("name")
|
---|
38 | )
|
---|