Skip to main content
 首页 » 编程设计

python之Django之如何使用数据库表查找

2025年05月04日26over140

我正在尝试使用 foreach 循环和 django 在网页上显示一些数据。 我似乎不明白如何使用我在数据库中创建的查找表。

这些是来自数据库的列:

budget_audit_table: 
-BudgetID 
-BudgetTypeID <- Foreign Key 
-ObjectAuditID 
-CustomerID 
-DateOfTransaction 
-BudgetObject 
-Amount 
 
budget_type: 
-BudgetTypeID 
-BudgetType 

正如您可能在 model.py 中假设的那样,BudgetTypeID 是一个外键。 在 budget_type 表中,我目前有 2 行: - 费用:ID 1 - 收入:ID 2

现在我遇到的问题是,我已经搜索了几天,试图更多地了解 Django 的 API,但我正在努力了解如何针对 budget_audit_table 中显示的每一行,我该如何代替显示 BudgetTypeID(例如 1),它显示 BudgetType(例如 Expense)?

这是我的 View 和模板

View .py

from django.contrib.auth.decorators import login_required 
from django.http import HttpResponse 
from django.template import RequestContext, loader 
from models import BudgetAuditTable 
from models import BudgetType 
 
@login_required 
def index(request): 
    budgetauditlist = BudgetAuditTable.objects.order_by('-budgetid') 
    template = loader.get_template('budget/budget.html') 
    context = RequestContext(request, { 
        'budgetauditlist': budgetauditlist, 
    }) 
    return HttpResponse(template.render(context)) 

模板

{% for budgetauditobject in budgetauditlist %} 
<tr> 
    <td>{{ budgetauditobject.budgetid }}</td> 
    <td>{{ budgetauditobject.budgettypeid }}</td> 
    <td>{{ budgetauditobject.objectauditid }}{{ budgetauditobject.customerid }}</td> 
    <td>{{ budgetauditobject.amount }}</td> 
</tr> 
{% endfor %} 

现在您可能想知道为什么我不使用 django 提供的“选择”。因为我是一个非常受数据库驱动的人,我认为数据库应该尽可能多地处理并将 python 作为请求和接收部分。

编辑

模型.py

class BudgetAuditTable(models.Model): 
    budgetid = models.IntegerField(db_column='BudgetID', primary_key=True) 
    budgettypeid = models.ForeignKey('BudgetType', db_column='BudgetTypeID', blank=True, null=True) 
    objectauditid = models.IntegerField(db_column='ObjectAuditID', blank=True, null=True) 
    customerid = models.IntegerField(db_column='CustomerID', blank=True, null=True) 
    dateoftransaction = models.DateField(db_column='DateOfTransaction', blank=True, null=True) 
    budgetobject = models.CharField(db_column='BudgetObject', max_length=255, blank=True) 
    amount = models.DecimalField(db_column='Amount', max_digits=10, decimal_places=2, blank=True, null=True) 
class Meta: 
    managed = False 
    db_table = 'budget_audit_table' 
 
class BudgetType(models.Model): 
    budgettypeid = models.IntegerField(db_column='BudgetTypeID', primary_key=True) 
    budgettype = models.CharField(db_column='BudgetType', max_length=25, blank=True) 
class Meta: 
    managed = False 
    db_table = 'budget_type' 

请您参考如下方法:

你真的应该展示你的模型。如果 budgettypeid 是 Django ForeignKey 字段,那么 budgetauditobject.budgettypeid 将为您提供实际的 BudgetType 对象,然后您可以使用普通的点表示法访问其字段。