【问题标题】:how to write 3 dependant table join query in Django如何在 Django 中编写 3 个依赖表连接查询
【发布时间】:2020-10-31 13:30:06
【问题描述】:

我是 django 新手,我想在 django 中创建连接查询,我的模型如下

模型.py

Class area_country(models.Model):
    country_id = models.AutoField(primary_key=True)
    country_name = models.CharField(max_length=100, null=True)
    short_name= models.CharField(max_length=20, null=True)
    flag_enable = models.SmallIntegerField()


    class Meta:
        db_table = "area_country"

class area_state(models.Model):
    state_id = models.AutoField(primary_key=True)
    state_name = models.CharField(max_length=100, null=True)
    short_name = models.CharField(max_length=20, null=True)
    country_id = models.ForeignKey(area_country, on_delete=models.CASCADE)
    flag_enable = models.SmallIntegerField()
    
    class Meta:
        db_table = "area_state"


class area_city(models.Model):
    city_id = models.AutoField(primary_key=True)
    city_name = models.CharField(max_length=100, null=True)
    short_name = models.CharField(max_length=20, null=True)
    state_id = models.ForeignKey(area_state, on_delete=models.CASCADE)
    flag_enable = models.SmallIntegerField()


    class Meta:
        db_table = "area_city"

我需要类似的查询

    SELECT "area_country"."country_id", 
           "area_country"."country_name",
           "area_state"."state_id",
           "area_state"."state_name", 
           "area_city"."city_id",
           "area_city"."city_name" 

   FROM "area_country" 
    LEFT OUTER JOIN "area_state" ON ("area_country"."country_id" = "area_state"."country_id_id") 
    LEFT OUTER JOIN "area_city" ON ("area_state"."state_id" = "area_city"."state_id_id")

** 由我试试 **

view.py

result = area_country.objects.all().select_related('area_state').values('country_id', 'country_name', 'area_state__state_id', 'area_state__state_name')

当我使用 query = result.query

打印它时
SELECT "area_country"."country_id", "area_country"."country_name", "area_state"."state_id", "area_state"."state_name" 
FROM "area_country" 
LEFT OUTER JOIN "area_state" ON ("area_country"."country_id" = "area_state"."country_id_id")

没关系,我试试

result = area_country.objects.all().select_related('area_state').select_related('area_city').values('country_id', 'country_name', 'area_state__state_id',  'area_state__state_name','area_city__city_id','area_city__city_name')

it show me error
Cannot resolve keyword 'area_city' into field. Choices are: area_state, country_id, country_name, flag_enable,  short_name

请帮助我进行 django 查询。
对于信息朋友,我知道如何在 django 中使用 cursor = connection.cursor() 编写原始查询

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    最终解决方案是,

    让我说清楚。我想要 js 数据表的数组,这就是为什么 temp = [] 并且我想要 json 响应所以 JsonResponse,

    view.py

    class get_all_country_state_city(View):
    def get(self, request):
        citys = area_city.objects.all()
       
        response = []
        
    
        if citys:
            response = []
            for value in citys:
                temp = []
       
    
                temp.append(value.city_name)
                temp.append(value.state_id.state_name)
                temp.append(value.state_id.country_id.country_name)
                response.append(temp)
    
    
    
        return JsonResponse({'data': response})
    

    如果你想直接在模板中显示那么

    view.py

     citys = area_city.objects.all()
    context = {
      
        'citys':citys
    
    }
    
    
    return render(request, "area.html", context)
    

    模板.html

     <table >
        <tbody>
                        {% for value in citys %}
                        <tr><td>{{value.state_id.country_id.country_name}}</td>
                        <td>{{value.state_id.state_name}}</td>
                            <td>{{value.city_name}}</td></tr>
                        {% endfor %}
        </tbody>
    </table>
    

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多