Python 我需要一种在基于django函数的列表视图中传递唯一对象id的方法
我在这方面已经被耽搁了好几天了,所有的帮助都将被珍视 我有一个基于函数的列表和详细视图,我的详细视图工作得很好,因为我能够传递url末尾的“/str:pk/”,并且请求为(def po_detail(request,pk)),这反过来我能够传递到我的视图函数中,它们都成功地返回我想要的唯一id 我有一个自定义查询集,我已经写了,以帮助我获得一些付款的总额,并返回它在列表和详细信息视图 现在的问题是,我无法获取列表视图页面中的每个唯一项,因为我无法将pk传递到url中,并且请求函数作为我使用它的详细信息函数的对象可以访问pk 为了防止出错,我将id=True,因为当我设置id=id时,它给了我一个错误:“字段'id'需要一个数字,但得到了。” 如果有人能提供提示、建议或解决方案,我将不胜感激 谢谢, 奥耶罗酒店 下面是我的模型Python 我需要一种在基于django函数的列表视图中传递唯一对象id的方法,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我在这方面已经被耽搁了好几天了,所有的帮助都将被珍视 我有一个基于函数的列表和详细视图,我的详细视图工作得很好,因为我能够传递url末尾的“/str:pk/”,并且请求为(def po_detail(request,pk)),这反过来我能够传递到我的视图函数中,它们都成功地返回我想要的唯一id 我有一个自定义查询集,我已经写了,以帮助我获得一些付款的总额,并返回它在列表和详细信息视图 现在的问题是,我无法获取列表视图页面中的每个唯一项,因为我无法将pk传递到url中,并且请求函数作为我使用它的详
class PurchaseOrder(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
po_type = models.ForeignKey(PurchaseOrderType, on_delete=models.SET_NULL, null=True)
status = models.CharField(choices=STATUS, max_length=15)
supplier_ID = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True)
order_date = models.DateField()
desired_ship_date = models.DateField()
ready_date = models.DateField()
po_amount = models.IntegerField()
def __str__(self):
return str(self.id)
class PurchaseOrderPayment(models.Model):
po_number = models.ForeignKey(PurchaseOrder, on_delete=models.SET_NULL, null=True)
date = models.DateField()
amount = models.IntegerField()
memo = models.CharField(max_length=200)
def __str__(self):
return self.memo
下面是我的视图函数
@login_required(redirect_field_name='po_list')
def po_list(request):
po_lists = PurchaseOrder.objects.all()
po_detail = PurchaseOrder.objects.get(id=True)
payment_lists_doc = PurchaseOrderPayment.objects.filter(po_number__id=True)
amount = po_detail.po_amount
paid_amount = PurchaseOrderPayment.objects.filter(po_number=po_detail).aggregate(Sum('amount'))['amount__sum']
balance = amount - paid_amount
context = {'po_lists':po_lists, 'payment_lists_doc':payment_lists_doc,
'amount':amount, 'paid_amount':paid_amount, 'balance':balance,
'payment_lists_doc':payment_lists_doc
}
return render(request, 'dashboard/po_list.html', context)
@login_required(redirect_field_name='po_detail')
def po_detail(request, pk):
po_detail = PurchaseOrder.objects.get(id=pk)
payment_lists_doc = PurchaseOrderPayment.objects.filter(po_number__id=pk)
document_lists_doc = PurchaseOrderDocument.objects.filter(po_number__id=pk)
amount = po_detail.po_amount
paid_amount = PurchaseOrderPayment.objects.filter(po_number=po_detail).aggregate(Sum('amount'))['amount__sum']
balance = amount - paid_amount
context = {'po_detail':po_detail, 'payment_lists_doc':payment_lists_doc,
'payment_form':payment_form, 'document_form':document_form,
'document_lists_doc':document_lists_doc,
'paid_amount':paid_amount,
'balance':balance, 'amount':amount}
return render(request, 'dashboard/po_detail.html', context)
这是我的列表模板
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>CREATED</th>
<th>TYPE</th>
<th>STATUS</th>
<th>SUPPLIER NAME</th>
<th>ORDER DATE</th>
<th>AMOUNT</th>
<th>PAID AMOUNT</th>
<th>BALANCE AMOUNT</th>
</tr>
</thead>
<tbody>
{% for po_list in po_lists %}
<tr>
<td style="cursor: pointer;"><a href="{% url 'po_detail' pk=po_list.pk %}">{{po_list.id}}</a></td>
<td>{{po_list.created_on}}</td>
<td>{{po_list.po_type}}</td>
<td>{{po_list.status}}</td>
<td>{{po_list.supplier_ID}}</td>
<td>{{po_list.order_date}}</td>
<td>{{po_list.po_amount}}</td>
<td data-toggle="modal" data-target="#paid_amount_modal" style="cursor: pointer;">
{{paid_amount}}
</td>
<td>{{balance}}</td>
</tr>
{% endfor %}
</tbody>
</table>
身份证件
创建
类型
地位
供应商名称
订购日期
数量
已付金额
余额
{采购订单列表%中采购订单列表的%
{{po_list.created_on}}
{{po_list.po_type}
{{po_list.status}
{{po_list.supplier_ID}}
{{po_list.order_date}
{{po_list.po_amount}}
{{已付金额}
{{balance}}
{%endfor%}
最后,我的详细信息模板
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>CREATED</th>
<th>TYPE</th>
<th>STATUS</th>
<th>SUPPLIER NAME</th>
<th>ORDER DATE</th>
<th>AMOUNT</th>
<th>PAID AMOUNT</th>
<th>BALANCE AMOUNT</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="{% url 'po_edit' pk=po_detail.pk %}">{{po_detail.id}}</a></td>
<td>{{po_detail.created_on}}</td>
<td>{{po_detail.po_type}}</td>
<td>{{po_detail.status}}</td>
<td>{{po_detail.supplier_ID}}</td>
<td>{{po_detail.order_date}}</td>
<td>{{po_detail.po_amount}}</td>
<td>{{paid_amount}}</td>
<td>{{balance}}</td>
</tr>
</tbody>
<div></div>
</table>
身份证件
创建
类型
地位
供应商名称
订购日期
数量
已付金额
余额
{{po_detail.created_on}}
{{po_detail.po_type}
{{po_detail.status}
{{po_detail.supplier_ID}}
{{po_detail.order_date}
{{po_detail.po_amount}}
{{已付金额}
{{balance}}
首先,修复错误
po_detail=PurchaseOrder.objects.get(id=True)
付款单=
PurchaseOrderPayment.objects.filter(采购订单编号\uuuu id=True)
金额=采购订单明细。采购订单金额=真
您需要将一个id(整数)传递给这些字段
包括截图,
如果有帮助,请记下我的答案
编辑您的models.py
class PurchaseOrder(models.Model):
...
@property
def get_payments_sum(self):
return sum(item.get_amount for item in self.items.all())
@property
def get_balance(self):
return self.get_payments_sum - self.po_amount
class PurchaseOrderPayment(models.Model):
po_number = models.ForeignKey(PurchaseOrder, on_delete=models.SET_NULL, null=True, related_name="items")
...
@property
def get_amount(self):
return self.amount
views.py
请注意,我只是编辑为修复您的问题(金额和余额),所以您必须添加上下文中剩余的任何内容,如“付款清单\单据”
po_lists.html
<tbody>
{% for po_list in po_lists %}
<tr>
<td style="cursor: pointer;"><a href="{% url 'po_detail' pk=po_list.pk %}">{{po_list.id}}</a></td>
<td>{{po_list.created_on}}</td>
<td>{{po_list.po_type}}</td>
<td>{{po_list.status}}</td>
<td>{{po_list.order_date}}</td>
<td>{{po_list.po_amount}}</td>
<td data-toggle="modal" data-target="#paid_amount_modal" style="cursor: pointer;">
{{po_list.get_payments_sum}}
</td>
<td>{{po_list.get_balance}}</td>
</tr>
{% endfor %}
</tbody>
{采购订单列表%中采购订单列表的%
{{po_list.created_on}}
{{po_list.po_type}
{{po_list.status}
{{po_list.order_date}
{{po_list.po_amount}}
{{po_list.get_payments_sum}}
{{po_list.get_balance}}
{%endfor%}
当然,先生,我已经尝试过了,但是我的get id是一个内置函数。如果您仔细观察,您会发现在po_详细信息视图中使用了相同的逻辑,但由于它已在url中传递,并在视图中沿请求传递,我能够使用它,那么我如何才能在列表视图的po_列表中通过pk并获得相同的ResultThank Dow yousef如果你的解决方案工作得很好,我就得到了窍门。谢谢@yousef,到目前为止,我只是能够投票选出一个答案,并将其标记为已被接受的答案,这是我在您的答案上严格完成的,因为它为我的需求提供了一个惊人的解决方案。谢谢,祝你今天愉快
<tbody>
{% for po_list in po_lists %}
<tr>
<td style="cursor: pointer;"><a href="{% url 'po_detail' pk=po_list.pk %}">{{po_list.id}}</a></td>
<td>{{po_list.created_on}}</td>
<td>{{po_list.po_type}}</td>
<td>{{po_list.status}}</td>
<td>{{po_list.order_date}}</td>
<td>{{po_list.po_amount}}</td>
<td data-toggle="modal" data-target="#paid_amount_modal" style="cursor: pointer;">
{{po_list.get_payments_sum}}
</td>
<td>{{po_list.get_balance}}</td>
</tr>
{% endfor %}
</tbody>