[英]In Django Tables2, how do you make a column show text from a table referenced by a foreign key?
[英]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.