落后关系如何与Django查询集

时间:2017-09-21 10:01:07

标签: python mysql django django-models django-queryset

我的下面是models.py:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.


class IndustryCat1(models.Model):
    name = models.CharField(max_length=256)

    class Meta:
        managed = False
        db_table = 'industry_cat_1'



class IndustryCat2(models.Model):
    name = models.CharField(max_length=256)
    num = models.CharField(max_length=10)
    label = models.CharField(max_length=200)
    industry_cat_1_id = models.ForeignKey('IndustryCat1')

    class Meta:
        managed = False
        db_table = 'industry_cat_2'



class IndustryCat3(models.Model):
    name = models.CharField(max_length=256)
    num = models.CharField(max_length=10)
    label = models.CharField(max_length=200)
    industry_cat_2_id = models.ForeignKey('IndustryCat2', blank=True, null=True, related_name='industry_cat_2_id')

    class Meta:
        managed = False
        db_table = 'Industry_cat_3'




class IndustryCat4(models.Model):
    name = models.CharField(max_length=256)
    num = models.CharField(max_length=10)
    label = models.CharField(max_length=200)
    industry_cat_3_id = models.ForeignKey('IndustryCat3', blank=True, null=True, related_name='industry_cat_3_id')

    class Meta:
        managed = False
        db_table = 'Industry_cat_4'

这是我编写查询的文件: industries.py:

from demo.models import IndustryCat1, IndustryCat2
import datetime
from django.db.models import Q

class Industries:


    @staticmethod
    def getIndustries(indId):
        try:

            b = IndustryCat1.objects.filter()
            return b.industrycat2_set.all()  # Returns all Entry objects related to Blog.

        except IndustryCat1.DoesNotExist:
            return None

这是我需要获取查询返回结果的文件,该结果在industries.py中实现: views.py:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from models import IndustryCat1
from demo.core.persistence.Industries import *
from django.shortcuts import get_object_or_404, render, render_to_response
from django.core import serializers
import json

def index(request):

    industry = Industries()

    qs = industry.getIndustries(1)

    return HttpResponse(serializers.serialize("json", qs))

    context = {'indus': indus}

    return render(request, 'demo/test/industries_catagories.html', context)

我的表格结构如下:

IndustryCat1的结果有两列id和name。

IndustryCat2将industryCat1 id作为foreignKey。

我想获取所有的IndustryCat1记录及其相应的industryCat2

我试图在industries.py中使用以下查询:

 b = IndustryCat1.objects.filter()
            return b.industryCat2_set.all()

但我得到以下错误:

  

/ demo /中的AttributeError'QuerySet'对象没有属性   'industryCat2_set'

任何有关如何应用此类查询的帮助都会对我有所帮助。

先谢谢。

1 个答案:

答案 0 :(得分:0)

默认相关名称应全部为小写。

...
b.industrycat2_set.all() # correct syntax but incorrect usage

OTOH,您有一个查询集而不是单个对象。您不能仅从查询集中filter返回的每个对象直接从查询集访问反向外键关系。

最后,请注意,不要将_id添加到外键的字段名称中。当您确实需要访问外键字段的id时,它会变得一团糟。