繁体   English   中英

Django 视图中的列从另一个表中引用为外部

[英]Django view with column referenced as foreign from another table

我有使用inspectdb从MySQL数据库创建的模型并迁移找到的内容。

现在我正在尝试为 html 页面创建视图。 但是,当我运行包含视图返回值的循环时,我得到了这种响应:

Customers object
331

total owed: 0.00
order date: Nov. 26, 2019, 10:10 p.m.
shipped: y

“客户对象”是“订单”表上引用“客户”表的外键。 我希望它包含 'customerid' 列,但我猜在 Django 中,视图中必须有一些操作来链接这两个列,否则会以这种方式出现。

循环以这种方式在 html 页面中运行:

       {% block content %}
            <div class="row">
                {% for order in orders %}
                    <div class="col-4" >
                        <br>  
                        <p><strong> {{ order.customerid }} <br>  {{ order.orderid }} <br>  </strong> <br> 
                            total owed: {{ order.total }} <br> order date: {{ order.entrydate }} 
                            <br> shipped: {{ order.shipped }}
                    </div>   
                {% endfor %}
            </div>
        {% endblock content %}

网址.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^orders/$', views.orders, name='orders'),
]

视图.py:

from __future__ import unicode_literals
from django.shortcuts import render

from .models import Orders, Customers
# Create your views here.

def orders(request):
    orders = Orders.objects.all()
    context = {'orders': orders}
    return render(request,'albums/orders.html', context)

带有引用表的models.py:

class Customers(models.Model):
    customerid = models.AutoField(primary_key=True)
    fname = models.CharField(max_length=50, blank=True, null=True)
    lname = models.CharField(max_length=50, blank=True, null=True)
    email = models.CharField(max_length=50, blank=True, null=True)
    telephone = models.CharField(max_length=10, blank=True, null=True)
    streetadd = models.CharField(max_length=50, blank=True, null=True)
    city = models.CharField(max_length=50, blank=True, null=True)
    country = models.CharField(max_length=50, blank=True, null=True)
    zip = models.CharField(max_length=5, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'customers'

class Orders(models.Model):
    orderid = models.AutoField(primary_key=True)
    total = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
    entrydate = models.DateTimeField(blank=True, null=True)
    shipped = models.CharField(max_length=1, blank=True, null=True)
    customerid = models.ForeignKey(Customers, models.DO_NOTHING, db_column='customerid', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'orders'

这似乎是一个相对容易的修复,需要进入视图“订单”功能,但我尝试过的解决方案不起作用。

提前致谢!

原因是您的外键名称是customerid并且您在Customer模型中有相同的field 因此,为了呈现Customer id您需要执行以下操作:

{{ order.customerid.customerid }}

但是你的结构总体上不是很好。 最好是这样的:

class Orders(models.Model):
    customer = models.ForeignKey(Customers, models.DO_NOTHING, db_column='customerid', blank=True, null=True)
    ....
class Customers(models.Model):
    id = models.AutoField(primary_key=True)

如果您以这种方式更改它,您可以通过以下方式访问它:

{{ order.customer.id }} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM