bry*_*bee 4 python django django-views
我最近一直在涉足 Django CBV 并有一个问题。也许你有比我更好的想法。
假设我有一个航空公司预订 CRM 应用程序,我打算为各种事情执行客户的显示。假设我有一个列表Models,对于一个Customer像Booking,Rating,Customer_Service_Calls,Favourited_Route。
现在,鉴于DetailView由 Django 的 CBV 实现,我有这样的东西
class CustomerThreeSixtyView(DetailView):
model = 'Customer'
def get_context_data(self, **kwargs):
context = super(CustomerThreeSixtyView, self).get_context_data(**kwargs)
context['bookings'] = Booking.objects.all.filter(customer_id=request.kwargs['pk']
context['ratings'] = Ratings.objects.all.filter(customer_id=request.kwargs['pk']
context['calls'] = Customer_Service_Calls.objects.all.filter(customer_id=request.kwargs['pk'], status'Open')
context['fav_routes'] = Favourited_Route.objects.all.filter(customer_id=request.kwargs['pk'], status'Open')
return context
Run Code Online (Sandbox Code Playgroud)
像这样的东西。我的问题是,有没有更好的方法来做到这一点?这是最直接的方法,但我正在寻求建议,因为似乎有些事情是必然的。
你所做的看起来已经足够好了。您将获得上下文中所需的内容,然后在模板中使用它来显示信息。
或者,您可以直接访问模板中特定客户的预订,而无需在上下文中指定它:
{% for booking in object.booking_set.all %} # object is the customer here
# do what you want to do with the booking here
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
如果您related_name在将客户链接到 Booking 时使用,那就更好了:
class Booking(models.Model):
customer = models.ForeignKey(Customer, related_name='bookings')
# other fields
Run Code Online (Sandbox Code Playgroud)
现在,您可以直接使用定义related_name来访问特定客户的预订:
{% for booking in object.bookings.all %}
# do what you want to do with the booking here
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
而且,你可以使用其他类,如同样的方法Rating,Customer_Service_Calls,Favourited_Route等。
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |