Получите все свойства вместе с их allowed_tenants в одном запросе. Django и React
У меня есть две модели Property и Tenants. Каждая Property может иметь несколько allowed_tenants. Модели
Мне нужен запрос, который бы извлекал все свойства вместе с их allowed_tenants в одном запросе (возможно, меньшее количество запросов), используя django orm
class Tenants(models.Model):
tenant_type = models.CharField(verbose_name='tenant type', max_length=32)
def __str__(self):
return self.tenant_type
class Property(models.Model):
owner = models.ForeignKey('user.User', on_delete=models.CASCADE, related_name='properties')
property_name = models.CharField(verbose_name='property name', max_length=64)
category = models.CharField(verbose_name='category', choices=Choices.category_choices, max_length=16)
bathrooms = models.IntegerField(verbose_name='bathrooms', default=1)
region = models.ForeignKey(Area, unique=True, related_name='properties', on_delete=models.CASCADE)
# area = models.CharField(verbose_name='area', max_length=128)
landmark = models.CharField(verbose_name='landmark', max_length=32)
expected_rent = models.CharField(verbose_name='expected rent', default='not disclosed', max_length=16)
expected_deposit = models.CharField(verbose_name='expected deposit', default='not disclosed', max_length=16)
available_from = models.DateField(verbose_name='available from', default=datetime.date.today)
allowed_tenants = models.ManyToManyField(Tenants, related_name='properties')
likes = models.IntegerField(verbose_name='like', default=0)
last_updated = models.DateField(verbose_name='last updated', auto_now_add=True)
Результат, который я ожидаю, должен быть таким =>
[{...property_details, tenants: ['family', 'bachelor'], property_name: 'property1'}, {...}]
я пробовал что-то подобное, но это дает мне несколько записей для одного объекта недвижимости с разными арендаторами в каждом объекте
properties = Property.objects.filter(allowed_tenants__tenant_type__in=['family']).annotate(
property_owner=F('owner__first_name'),
city=F('region__city__city'),
area=F('region__area_name'),
tenants=F('allowed_tenants__tenant_type'),
).values(
'property_owner', 'property_name', 'category', 'bathrooms', 'city', 'area', 'landmark',
'expected_rent', 'expected_deposit', 'available_from', 'tenants', 'likes', 'last_updated'
)
[{...property1, tenants: 'family', property_name:'property_1'}, {...property1, tenants: 'bachelor', property_name:'property_1'}, {...}]