【问题标题】:Django questionDjango 问题
【发布时间】:2010-10-12 11:26:17
【问题描述】:

我有一个 django 应用程序,它可以显示发票和客户。现在由于某些原因,当我运行 Django 服务器时,由于某些原因,它仅在 invoice_list 中显示发票数据,但无法在 clients_list 中显示客户数据。客户数据确实显示在另一个视图中,但不在 invoice_details 视图中。

编辑:我似乎解决了一些问题。 clients_list 中的客户数据确实出现了,但由于某种原因出现在错误的 url 中。我尽量简单地解释它。

网址

(r'^index/invoice_details/1 客户详细信息出现在此页面上。 (r'^index/invoice_details/2 客户详细信息出现在此页面上。 (r'^index/invoice_details/3此页面上显示发票。

现在我想让 r'^index/invoice_details/3 也显示写在 (r'^index/invoice_details/1 中的内容,但是因为两个数字不同,它会失败。

这里有一些可能有用的输出。

#models.py
Class Client(models.Model):
    company = models.CharField(max_length=80)
    first_name = models.CharField(max_length=80, blank=True, null=True)
    last_name = models.CharField(max_length=80, blank=True, null=True)
    address = models.CharField(max_length=250)
    city = models.CharField(max_length=100)
    country = models.CharField(max_length=120)
    postcode = models.CharField(max_length=7)
    telephone = models.CharField(max_length=20)
    email = models.EmailField()
    additional_info = models.TextField(blank=True, null=True)

    def __unicode__(self):
            return self.company 

class Invoice(models.Model):
    client = models.ForeignKey(Client)
    date = models.DateField()
    invoice_no = models.CharField(max_length=16)
    work_orders = models.ManyToManyField(Work_Order)
    contract_info = models.ForeignKey(Contract_Info)

    def __unicode__(self):
                return self.invoice_no


    # urls.py
    urlpatterns = patterns('',
       (r'^index/invoice/$', invoice_info),
       (r'^index/invoice_details/(?P<id>\d+)/$', invoice_details),
    )

    #views.py
    @login_required 
    def invoice_details(request, id=1):
            clients_list = Client.objects.filter(pk=id)
        invoices_list = Invoice.objects.filter(pk=id) 
        return render_to_response(('invoice_details.html
', locals()), {'clients_list': clients_list, 'invoices_list': invoices_list }, context_instance=RequestContext(request))

    @login_required 
    def clients_details(request, id=1):
       clients_list = Client.objects.filter(pk=id) 
       return render_to_response(('clients_details.html', locals()), {'clients_list':   clients_list}, context_instance=RequestContext(request))

#invoice_details.html
{% extends "base.html" %}

{% block content %}
<h2>Invoice Details</h2>
<div id="horizontalnav">
  <a href="/index/add_invoice">Add an Invoice</a>
  <a href="/index/work_orders">Add a Work Order</a>
  <a href="/index/add_payment">Add Payment</a>
</div>
<ul STYLE="border: 1px solid;float:left;padding:15px; width: 400px;">
<img src="{{ MEDIA_URL }}images/c2duo.png" border="0" STYLE="text-alignment:left">
<p STYLE="margin-left:340px; margin-top:0px; COLOR:blue; Font-family:ARIAL">INVOICE
  <div id="list">

     {% for invoice in invoices_list %}
       {{invoice.client}}
       <p style="text-align: right;">INVOICE # {{invoice.invoice_no}}<br/>
       {{invoice.contract_info}}<br/>
       {{invoice.date}}<br/>
       {% for invoice in invoice.work_orders.all %}
         {{invoice}}<br/>
       {% endfor %}
     {% endfor %}
     {% for clients in clients_list %}
       {{clients.company}}<br/>
       {{clients.postcode}}<br/>
     {% endfor %}

    </div>
</ul>
{% endblock %}

【问题讨论】:

  • 你为什么要return render_to_response(('clients_details.html', locals()), {...})?引用本地人的元组有什么意义?通常使用 locals 代替上下文字典(我讨厌的成语,但没关系),但你同时提供。
  • 这是一个巧合——您的客户 ID 为 1 与发票 ID 1 相关联,发票 2 也与客户 2 相关联。我假设您没有 id 为 3 的客户。
  • @Lou Franco - 好的,您是说不要调用 id,而是为客户和发票使用不同的 id?例如(client_id invoice_id)。如果是这样,我该如何完成这项工作?
  • 视情况而定。 invoices_list 中的每张发票可以有不同的客户吗?在您的模板中,发票有一个客户字段。为什么不直接从发票中访问它?
  • @Lou Franco。是 我的发票有一个客户字段。 (检查我的models.py,我已经把它放了)但这只显示公司名称。这是因为在我的 model.py 中,我的 Client 类下有 def __unicode__(self):return self.company。哦,至于你的第一个问题,情况正好相反。 client_list 中的一个客户可以有许多发票。

标签: django templates tags django-urls django-views


【解决方案1】:
 clients_list = Client.objects.filter(pk=id)

id 是发票 ID。

编辑:(基于问题的 cmets)

@login_required 
def invoice_details(request, id=1):
    invoices_list = Invoice.objects.filter(pk=id) 
    client = invoices_list[0].client
    return render_to_response(('invoice_details.html', 
      locals()), {'client': client, 
      'invoices_list': invoices_list }, 
      context_instance=RequestContext(request))

模板:取出客户端的for循环,放入:

   {{client.company}}<br/>
   {{client.postcode}}<br/>

【讨论】:

  • 你知道,这可能奏效了。一旦我输入更多数据,我就会发现
【解决方案2】:

您确定clients_list 变量正在获取有效值吗?客户端和发票过滤器的过滤器(pk=id)相同。尝试插入一个

  print clients_list

就在过滤器调用的行之后,看看它包含什么。

【讨论】:

  • 问题是我最初从不同的角度首先为客户使用了 id。这实际上有效,我调用了 id=pk。奇怪的是为什么客户不工作而发票却可以。打印clients_list 没有使它工作。这是我在意见中为客户写的。 @login_required def clients_details(request, id=1): clients_list = Client.objects.filter(pk=id) return render_to_response(('clients_details.html', locals()), {'clients_list': clients_list}, context_instance=RequestContext (请求))
【解决方案3】:

clients_list = Client.objects.filter(pk=id) 附近出现奇怪的缩进

【讨论】:

  • 如果这是准确的复制/粘贴,则必须修正缩进。
猜你喜欢
  • 1970-01-01
  • 2011-06-04
  • 2017-12-14
  • 2020-12-26
  • 2018-03-14
  • 2016-01-27
  • 2011-01-16
  • 2010-10-04
  • 2021-08-10
相关资源
最近更新 更多