簡體   English   中英

我想在 Django 中使用 ORM 獲取兩個查詢數據的結果

[英]I want to get result of two query data using ORM in django

我想在 Django 中使用 ORM 獲取兩個查詢數據的結果,但只顯示一個數據。 我該如何解決這個問題?

我的代碼:

視圖.py

def home(request):
    
    codes, descrp = Major.objects.raw('SELECT p.major_cd, m.description FROM percentages p, major m WHERE p.major_cd = m.major_cd;')
    context = { 
               "codes": codes,
               "descrp": descrp
    }
 return render(request, "website/index.html" , context )

索引.html

<select class="form-control select2">
   <option>Select Major Head</option> 
   {% for cd, ds in codes, descrp %}
    <option> {{ cd, ds }} </option> 
    {% endfor %} 
    </select>

楷模

class Major(models.Model):
    major_cd = models.IntegerField(primary_key=True)
    description = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'major'

class Percentages(models.Model):
    major_cd = models.IntegerField(primary_key=True)
    percentage = models.CharField(max_length=5, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'percentages'

我想根據百分比表中的“major_cd”過濾掉主表中的“major_cd”。

預期結果:列 = Major_cd 的數據,來自主要表的描述

在我看來,將模型重寫為ForeignKey可能會更好,這使得在 Django 中查詢更加方便:

class Major(models.Model):
    major_cd = models.IntegerField(primary_key=True)
    description = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'major'

class Percentages(models.Model):
    major_cd = models.OneToOneField(
        Major,
        on_delete=models.CASCADE,
        primary_key=True,
        db_column='major_cd'
    )
    percentage = models.CharField(max_length=5, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'percentages'

完成后,我們可以查詢:

def home(request):
    majors = Major.objects.filter(percentage__isnull=False)
    context = { 
        'majors': majors
    }
    return render(request, 'website/index.html', context)

在模板中,我們可以使用以下方法渲染它:

<select class="form-control select2">
  <option>Select Major Head</option> 
  {% for major in majors %}
    <option>{{ major.pk }}: {{ major.description }}</option> 
  {% endfor %} 
</select>

您可以使用 Q,從 django.db.models 導入 Q。

例如,您可以將其設置為 .. descrp = Major.objects.filter(Q(major_cd=.major_cd) & Q(m_description=m.description))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM