Объединение 2 наборов запросов и отображение Django

Я новичок в django

Я пытаюсь объединить два набора запросов, например, у меня есть различные фермы. и в этих фермах есть соответствующие блоки.

Я хотел бы вывести ферму как заголовок и под ним список блоков каждой фермы.

Пример:

Ферма 1 Блок 1 Блок 2 Блок 3

Ферма 2 Блок 1 Блок 2 Блок 3

Что я имею на данный момент в просмотрах:

def irrigation(request):   

 obj3 = Farms.objects.all().values("id", "farm_name")
 obj2 = Blocks.objects.all()

 obj = obj2 | obj3

 context = {"object": obj}      

 return render(request, "irrigation.html", context)

в html:

 {% for farms in object %}
 <tr>
 <td>{{ farms.farm_name }} {{ farms.id }}</td>
 <td><a href="/ifarm/{{ farms.id }}"> Edit </a>                         
 </tr>
 {% endfor %}

В моделях

class Blocks(models.Model):
 farm_id = models.CharField(max_length=100)    
 block_name = models.CharField(max_length=255, null=True)
 block_size = models.CharField(max_length=255, null=True)
 block_concurrent = models.CharField(max_length=255, null=True)
 block_full_bloom = models.CharField(max_length=255, null=True)
 block_harvest_start = models.CharField(max_length=255, null=True)
 block_harvest_complete_date = models.CharField(max_length=255, null=True)
 block_log1 = models.CharField(max_length=255, null=True)
 block_log2 = models.CharField(max_length=255, null=True)
 block_log3 = models.CharField(max_length=255, null=True)
 block_crop_class = models.CharField(max_length=255, null=True)
 block_crop_type = models.CharField(max_length=255, null=True)
 block_crop_subtype = models.CharField(max_length=255, null=True)
 block_planted_date = models.CharField(max_length=255, null=True)
 block_plant_height = models.CharField(max_length=255, null=True)
 block_root_system = models.CharField(max_length=255, null=True)

class Farms(models.Model):
 farm_name = models.CharField(max_length=100)
 user_id = models.IntegerField(default='1')
 user_groups = models.JSONField(null=True)

Помогите, пожалуйста!

Я нашел решение, используя внешний ключ.

Обновленные модели:

class Blocks(models.Model):
 #farm_id = models.CharField(max_length=100)  
 farm = models.ForeignKey(Farms, on_delete=models.CASCADE, default=None)   
 block_name = models.CharField(max_length=255, null=True)
 block_size = models.CharField(max_length=255, null=True)
 block_concurrent = models.CharField(max_length=255, null=True)
 block_full_bloom = models.CharField(max_length=255, null=True)
 block_harvest_start = models.CharField(max_length=255, null=True)
 block_harvest_complete_date = models.CharField(max_length=255, null=True)
 block_log1 = models.CharField(max_length=255, null=True)
 block_log2 = models.CharField(max_length=255, null=True)
 block_log3 = models.CharField(max_length=255, null=True)
 block_crop_class = models.CharField(max_length=255, null=True)
 block_crop_type = models.CharField(max_length=255, null=True)
 block_crop_subtype = models.CharField(max_length=255, null=True)
 block_planted_date = models.CharField(max_length=255, null=True)
 block_plant_height = models.CharField(max_length=255, null=True)
 block_root_system = models.CharField(max_length=255, null=True)

Обратите внимание на строку:

farm = models.ForeignKey(Farms, on_delete=models.CASCADE, default=None) 

Фермы остались прежними:

class Farms(models.Model):
 farm_name = models.CharField(max_length=100)
 user_id = models.IntegerField(default='1')
 user_groups = models.JSONField(null=True)  

Затем я выполнил команды:

python manage.py makemigrations
python manage.py migrate

В просмотрах:

def irrigation(request):
 obj = Blocks.objects.all()
 context = {"object": obj}    
 return render(request, "irrigation.htm", context)

Вывод в html:

{% for blocks in object %}
{{ blocks.block_name }} 
{% endfor %}
Вернуться на верх