【问题标题】:Combine 2 Query sets and display Django组合 2 个查询集并显示 Django
【发布时间】:2022-11-08 12:42:16
【问题描述】:

我是 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)

请帮忙!

【问题讨论】:

  • 你也可以分享你的模型吗

标签: python django


【解决方案1】:

我找到了使用外键的解决方案。

更新模型:

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 %}

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 2020-04-27
    • 2013-09-06
    • 2017-12-04
    • 1970-01-01
    • 2019-08-11
    • 2020-12-24
    • 2015-12-07
    • 2016-05-09
    相关资源
    最近更新 更多