SQL Запрос на Django Запрос - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь понять, как преобразовать приведенный ниже SQL запрос в Django запрос

select main_project.name, (main_contacts.first_name) as Name, group_concat(main_property.property_id) as Properties, sum(main_property.area), (main_contacts.first_name||main_project.name) as CONPROP 
from main_project
INNER join main_property on main_property.project_id = main_project.id
INNER join main_property_owner ON main_property_owner.property_id = main_property.id
INNER JOIN main_contacts ON main_contacts.id = main_property_owner.contacts_id
group by CONPROP

models.py

class Contacts(models.Model):
    first_name = models.CharField(max_length=15)
    last_name = models.CharField(max_length=15, null=True, blank=True)
    mobile = models.CharField(max_length=10, unique=True)
    email = models.EmailField(unique=True, null=True, blank=True)

    def __str__(self):
        return f'{self.first_name} - {self.mobile}'


class Project(models.Model):
    name = models.CharField(max_length=100)
    address = models.ForeignKey(Address, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


class Property(models.Model):
    added_on = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, related_name='creator',
                                limit_choices_to={'is_staff': True})
    property_id = models.CharField(max_length=10, unique=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='properties')
    owner = models.ManyToManyField(Contacts, blank=True)
    area = models.DecimalField(max_digits=20, decimal_places=2)
    internal = models.TextField(null=True, blank=True)
    external = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.property_id

Я узнал, что это будет сделано с помощью 'annotate', но почему-то я не могу этого сделать.

...