2016-10-02 21 views
0

Ich habe ein Modell 'VehicleDetails' erstellt, in dem ein Benutzer die Details eines Fahrzeugs und ein anderes Modell 'TripStatus' ausfüllen kann, in dem er den Fahrzeugstandort aktualisiert. Ich wollte den neuesten Ort, für den ich wie in meinem unteren Code getan habe. Ich verwende prefetch_related in meiner Sicht, um die Standortwerte für ein bestimmtes Fahrzeug zurückzugeben. Aber nach dem Ausführen des Servers wird ein Fehler ausgegeben: "TripStatus-Objekt hat kein Attribut 'prefetch_related'". Ich würde mich freuen, mir dabei helfen zu können. models.py:Python/Django: Modell Objekt hat kein Attribut 'prefetch_related'

class VehicleDetails(models.Model): 
    Vehicle_No = models.CharField(max_length=20) 

class TripStatus(models.Model): 
    vehicledetails = models.ForeignKey(VehicleDetails, related_name='statuses') 
    CHOICES = (('Yet to start', 'Yet to start'),('Trip starts', 'Trip starts'), ('Chennai','Chennai'), ('Vizag', 'Vizag'), ('Kolkata', 'Kolkata')) 
    Vehicle_Status = models.CharField(choices=CHOICES, default="Yet to start", max_length=20) 
    statustime = models.DateTimeField(auto_now=False, auto_now_add=True) 

views.py:

def status(request): 
    tripstatus = TripStatus.objects.all().latest('statustime').prefetch_related('statuses') 
    context = { 
     "tripstatus": tripstatus, 
    } 
    return render(request, 'loggedin_load/active_deals.html', context) 

Vorlage:

{% for status in vehicledetails.statuses.all %} 
{{status.Vehicle_Status}} 
{% endfor %} 

Antwort

1

prefetch_related auf einem queryset Objekt arbeitet. Latest gibt ein einzelnes Modell und kein Queryset zurück.

Diese Arbeit sollte:

tripstatus = TripStatus.objects.all().prefetch_related('statuses').latest('statustime') 
+0

seine jetzt: Kann nicht 'Status' auf TripStatus Objekt finden 'Status' ist ein ungültiger Parameter prefetch_related(). – sumanth

+0

pefetch_related lädt Fremdschlüssel-Tabellen für die Leistung. Sie haben keinen Status-Fremdschlüssel in Ihren TripStatus-Modellen. Entfernen Sie einfach den Prefetch-Aufruf. –

Verwandte Themen