2017-04-11 9 views
0
In [23]: perc = Perception.objects.all()  

In [24]: list = [] 

In [25]: for item in perc: 
    ...:  if item.loan.request.customer_id not in list: 
    ...:   print(item.loan.request.customer.user.last_name, item.loan.requ 
    ...: est.customer.user.first_name) 
    ...:  list.append(item.loan.request.customer_id) 
    ...:  
(u'Kshlerin', u'Dwight') 
(u'Boyer', u'Keshaun') 

Ich möchte solche Schleife in der Vorlage reproduzieren.Reproduzieren in einem Django-Vorlage

Hier ist die Ansicht zu dieser Vorlage bezogen werden:

class PerceptionIndexView(StaffRestrictedMixin, FrontendListView): 
    page_title = _('Perception') 
    model = Perception 
    template_name = 'loanwolf/perception/index.html' 
    pjax_template_name = 'loanwolf/perception/index.pjax.html' 
    #row_actions_template_name = 'loanwolf/perception/list-actions.inc.html' 
    url_namespace = 'perception' 

    #def get_icon(self, req): 
    # return icon(req.get_icon(), css_class=get_request_color(req, text=True)) 

    def active(self, obj): 
     if obj.is_active: 
      return icon(obj.get_icon(), css_class='green-text', tooltip=_('Active')) 
     else: 
      return icon(obj.get_icon(), css_class='red-text', tooltip=_('Inactive')) 

    def get_customer(self, req): 
     return 'test' 
     #url = reverse('customers:profile', kwargs={'cust': req.customer.user.pk}) 
     #return '<a href="%s">%s</a>' % (url, req.customer) 

    def notes_count(self, obj): 
     return obj.notes.count() 
    notes_count_label = _('Notes') 

    def get_change_url(self, obj): 
     return obj.get_absolute_url() 

    class Meta: 
     ordering = ('-created', '-modified') 
     sortable = ('start_date', 'end_date', 'created', 'state', 'modified') 
     list_filter = ('state', 'is_active') 
     list_display = (
      'loan', 'state', 'start_date', 'end_date', 'current_balance', 
      'operation_error', 'modified', 'created', 'notes_count', 'active' 
     ) 

und hier wird das Modell zu dieser Vorlage bezogen werden:

@python_2_unicode_compatible 
class Perception(xwf_models.WorkflowEnabled, TimeStampedModel): 
    loan = models.ForeignKey('loans.Loan') 
    state = xwf_models.StateField(PerceptionWorkflow) 
    start_date = models.DateField(_('Start date')) 
    end_date = models.DateField(_('End date'), blank=True, null=True) 

    current_balance = models.DecimalField(_('Current balance'), 
         default=0, decimal_places=2, max_digits=11) 
    operation_error = models.SmallIntegerField(_('Operation error'), default=0) 
    notes = GenericRelation(Note) 

Ich dachte, ich TemplateTag verwenden könnte so etwas zu reproduzieren, aber Ich möchte etwas leichter haben. Könnte mir jemand sagen, was ich tun könnte, um das in meiner Vorlage zu implementieren? Eines meiner Probleme besteht darin, eine Liste innerhalb einer Django-Vorlage zu erstellen.

+0

Was sind die 'perc' Variable? Was möchten Sie mit der Liste in der Vorlage tun? – Alasdair

+1

Sie brauchen dringend einen 'user = item.loan.request.customer.user' – thebjorn

+0

Sorry Leute, ich werde meine Frage ändern. –

Antwort

0

Es sieht aus, als ob der einfachste Ansatz, um die Liste in der get_context_data Methode Sicht zu schaffen wäre:

def get_context_data(self, **kwargs): 
    """Add list of customer ids to the context""" 
    context = super(PerceptionIndexView, self).get_context_data(**kwargs) 
    customer_ids = [] 

    # Since this is a ListView, I believe you can change the loop to 
    # 'for item in context['object_list']:', and remove the perc queryset 
    perc = Perception.objects.all() 
    for item in perc: 
     customer_id = item.loan.reqest.customer_id 
     if customer_id not in perc: 
      customer_ids.append(customer_id) 
    context['customer_ids'] = customer_ids 
    return context 

Dann in Ihrer Vorlage können Sie Schleife durch die Liste

<ul> 
{% for customer_id in customer_ids %} 
    <li>customer_id</li> 
{% endfor %} 
</ul> 
+0

'TypeError: get_context_data() Argument nach ** muss ein Mapping sein, nicht Tupel' ... Warum habe ich diesen Fehler? –

+0

Es gab einen Tippfehler, es sollte '** kwargs' in der Methodendefinition sein. – Alasdair

Verwandte Themen