python / django: объект модели не имеет атрибута ‘prefetch_related’

#python #django #django-models #django-templates #django-views

#python #django #django-модели #django-шаблоны #django-представления

Вопрос:

Я создал модель ‘VehicleDetails’, в которой пользователь может заполнить сведения о транспортном средстве, и другую модель ‘TripStatus’, в которой он обновляет местоположение транспортного средства. Я хотел получить последнее местоположение, для которого я сделал, как в моем приведенном ниже коде. Я использую prefetch_related, на мой взгляд, для возврата значений местоположения для конкретного транспортного средства. Но, когда после запуска сервера он выдает сообщение об ошибке: «Объект TripStatus не имеет атрибута ‘prefetch_related'». Я был бы признателен за помощь в решении этой проблемы. models.py:

 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)
  

шаблон:

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

Ответ №1:

prefetch_related работает с объектом набора запросов. Последняя возвращает единую модель, а не набор запросов.

Это должно сработать :

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

Комментарии:

1. теперь его: не удается найти ‘statuses’ в объекте TripStatus, ‘statuses’ является недопустимым параметром для prefetch_related ().

2. pefetch_related загружает таблицы внешних ключей для повышения производительности. На самом деле у вас нет внешнего ключа statuses в ваших моделях TripStatus, поэтому просто удалите вызов prefetch_related.