2016-05-12 5 views
1

Ich muss in der Lage sein, alle Reservierungen anzeigen, die von dem authentifizierten Benutzer auf Vorlage vorgenommen werden. Ich benutze einen Model Manager, um die Methode get_queryset zu überschreiben, um die benötigten Eigenschaften zurückzugeben.Einträge anzeigen, die von authentifizierten Benutzer mit Model Manager

Dann verwenden Sie es als das Abfrage-Set in einer Ansicht, bevor Sie es an die Vorlage übergeben. Ich weiß nicht, was ich falsch machen könnte, als ich dem documentation on managers folgte.

models.py

class ReservationManager(models.Manager):

use_for_related_fields = True 

    def get_queryset(self): 
    return super(ReservationManager, self).get_queryset().filter(customer_name=User) 

class Reservation(models.Model):

""" 
this class will contain all information that concerns a car reservation 
""" 

customer_name = models.ForeignKey(User) 
vehicle = models.ForeignKey(Car) 
pickup_location = models.ForeignKey(Location) 
drop_location = models.ForeignKey(Location, related_name='drop_location') 
pickup_time = models.DateTimeField(blank=False) 
drop_time = models.DateTimeField(blank=False) 
reserved_on = models.DateTimeField(auto_now_add=True) 
edited_on = models.DateTimeField(auto_now=True) 
completed = models.BooleanField(default=False) 

reservations = ReservationManager() 

views.py

class ReservationsList(ListView):

`

Vorlage

Die Vorlage sollte alle Reservierungen durch den authentifizierten Benutzer gemacht anzuzeigen.

<tbody> 
 

 
{% if user.is_authenticated %} 
 
      {% for reservation in reservations %} 
 

 

 
<tr class="row1"><td class="action-checkbox"><input class="action-select" name="_selected_action" type="checkbox" value="2" /></td> 
 
    <th class="field-code white-text grey center">{{reservation.code}}</th> 
 
    <td class="field-customer_name nowrap">{{reservation.customer_name}}</td> 
 
    
 
    <td class="field-vehicle nowrap">{{reservation.vehicle}}</td> 
 
    <td class="field-pickup_location nowrap white-text grey center">{{reservation.pickup_location}}</td> 
 
    <td class="field-drop_location nowrap">{{reservation.drop_location}}</td> 
 
    <td class="field-pickup_time nowrap white-text grey center">{{reservation.pickup_time}}</td> 
 
    <td class="field-drop_time nowrap ">{{reservation.drop_time}}</td> 
 
    <td class="field-reserved_on white-text grey center nowrap">{{reservation.reserved_on}}</td> 
 
</tr> 
 

 

 
{% endfor %} 
 

 
{% else %} 
 
nothing 
 
{% endif %} 
 
</tbody>

Was mein Tun falsch sind?

+0

Haben Sie versucht, eine Import-PDB zu importieren? pdb.set_trace() um zu sehen, was Reservierungen bringen? – jsanchezs

Antwort

1

Sie versuchen, auf eine Eigenschaft der Anfrage (dh den aktuellen Benutzer) auszuwählen, aber ein Manager existiert unabhängig von Anfragen.

Haben Sie versucht, eine integrierte Klassenansicht zu verwenden? Es ist das Äquivalent get_queryset Methode auf einer Instanz der Klasse, die zur Verfügung self.request hat und daher self.request.user

die Django-Dokumentation Beispiel Umformulierung (bei https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-display/) leicht:

class ReservationList(ListView): 

    template_name = 'reservation_list.html' 

    def get_queryset(self): 
     return Reservation.objects.filter(customer=self.request.user) 

Ich habe gerade kopiert-eingefügt und dann das Beispiel gehackt, aber hoffentlich ist es nahe genug, um für dich zu arbeiten, um Fortschritte zu machen.

Verwandte Themen