Django中简单的Foreingkey

时间:2015-06-26 17:16:49

标签: python django foreign-keys django-queryset many-to-one

我在Django打招呼。

我在我的数据库中有一个名为'produto'的表,每个产品都属于一个组,我想在同一个'for'中显示该组的名称,其中显示的是产品数据。

models.py

from django.db import models

# Create your models here.
class Grupo(models.Model):
    codigo = models.AutoField(primary_key=True)
    nome = models.CharField(max_length=40, blank=True, null=True)
    tp_linha = models.IntegerField()
    data_alt = models.DateField(blank=True, null=True)
    data_inc = models.DateField(blank=True, null=True)
    status = models.CharField(max_length=1)

    class Meta:
        managed = False
        db_table = 'grupo'

class Produto(models.Model):
    codigo = models.AutoField(primary_key=True)
    nome = models.CharField(max_length=80)
    referencia = models.CharField(max_length=30)
    fabricante = models.IntegerField()
    quantidade = models.DecimalField(max_digits=17, decimal_places=6)
    preco_venda = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True)
    #...

    grupo_produto = models.ForeignKey(Grupo, related_name='grupo')
    def __str__(self):
        return self.nome

    class Meta:
        managed = False
        db_table = 'produto'

views.py

from django.shortcuts import render_to_response
from django.shortcuts import render

from .models import Servico, Produto, Grupo

# Create your views here.
def home(request):
    servicos = Servico.objects.using('mydatabase').all()
    produtos = Produto.objects.using('mydatabase').all()
    grupos = Grupo.objects.using('mydatabase').all()
    return render(request, 'home.html', {'servicos': servicos, 'produtos': produtos, 'grupos': grupos})

home.html的

{% for Produto in produtos %}
    <tr>
        <td>{{Produto.codigo}}</td>
        <td>{{Produto.nome}}</td>
        <td>{{Produto.referencia}}</td>
        <td>{{Produto.fabricante}}</td>
        <td>{{Produto.quantidade}}</td>
        <td>R$ {{Produto.preco_venda}}</td>
        <td>{{Grupo.nome}}</td>
    </tr>
{% empty %}
    <span>Nenhum resultado encontrado</span>
{% endfor %}

我迷失在这里,已经出现了一些错误,但我不知道这样做。

// UPDATE

我解决了以下方式

from django.shortcuts import render_to_response
from django.shortcuts import render

from .models import Grupo, Produto

# Create your views here.
def home(request):
    produtos = Produto.objects.using('horus').raw('SELECT produto.codigo, produto.nome, produto.quantidade, produto.preco_venda, grupo.nome AS nome_grupo FROM produto LEFT JOIN grupo on (produto.grupo = grupo.codigo);');

    return render(request, 'home.html', {'produtos': produtos})

{% for Produto in produtos %}
        <tr>
            <td>{{Produto.codigo}}</td>
            <td>{{Produto.nome}}</td>
            <td>{{Produto.quantidade}}</td>
            <td>R$ {{Produto.preco_venda}}</td>
            <td>{{Produto.nome_grupo}}</td>
        </tr>
{% empty %}
    <span>Nenhum resultado encontrado</span>
{% endfor %}

https://docs.djangoproject.com/en/1.8/topics/db/sql/

我不知道如果做得对,我想提示。

2 个答案:

答案 0 :(得分:0)

尝试使用

<td>{{Produto.grupo_produto.nome}}</td>

这有帮助吗?

如果这没有帮助尝试

<td>{{Produto.grupo.nome}}</td>

它可能只是您的相关名称。

答案 1 :(得分:0)

根据你的模型,它应该是{{Produto.grupo_produto.nome}}所以如果这不起作用,问题就在别处

  

(1054,“字段列表中的未知栏'produto.grupo_produto_id'”)

这表明您的数据库中还没有grupo_produto = ForeignKey(...)字段,检查您的数据库和数据库迁移,这就是您的问题所在

P.S:

无需尝试{{Produto.grupo.nome}} related_name='grupo'用于访问Produto对象(属于某个群组的产品)中的Grupo个对象

哪个应该以{{1​​}}的名字命名 你可以使用related_name='produtos',这是有道理的

你命名为grupo.produtos的方式,它将是related_name='grupo'没有意义(坏名称)