组合2个查询集并显示Django



我是django 的新手

我正在尝试梳理两个查询集,例如,我有不同的农场。在这些农场里,他们有各自的区块。

我想把农场作为标题输出,并在下面列出每个农场的块。

示例:

农场1区块1区块2Blaock 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 %}

最新更新