Проблемы с базой данных Django после развертывания на Heroku
После развертывания на Heroku у меня возникла следующая проблема. В зависимости от страницы модель, вызывающая ошибку, меняется, но проблема остается той же самой.
Пример, который я приведу, запускается со страницы trailer-locations/.
Прежде чем я поделюсь своей моделью TrailerLocation, мне также необходимо обсудить мою модель Trailer. При создании записи в моей модели прицепа у меня есть 2 функции, которые также создают записи в модели TrailerLocation и TrailerTrip, я опишу их ниже.
Модель прицепа
class Trailer(models.Model):
trailerNumber = models.CharField(max_length=200)
trailerPlateState = models.CharField(max_length=30)
trailerPlateNumber = models.CharField(max_length=30)
trailerLeaseCompany = models.CharField(max_length=200)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.trailerNumber
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if TrailerLocation.objects.filter(trailer__trailerNumber=self.trailerNumber).exists() is False:
createFirstTrailerLoc(self.id)
if TrailerTrip.objects.filter(trailer__trailerNumber=self.trailerNumber).exists() is False:
createFirstTrailerTrip(self.id)
2 вспомогательные функции createFirstTrailerLoc() и createFirstTrailerTrip() Для справки, они находятся в файле models.py
def createFirstTrailerLoc(trailerId):
trailer = Trailer.objects.get(id=trailerId)
trailerLocation = TrailerLocation(trailer=trailer)
trailerLocation.save()
def createFirstTrailerTrip(trailerId):
trailer = Trailer.objects.get(id=trailerId)
trailerTrip = TrailerTrip(trailer=trailer)
trailerTrip.save()
Модель размещения прицепа
trailer = models.OneToOneField(Trailer, on_delete=models.CASCADE)
locationCity = models.CharField(max_length=70, null=True, blank=True)
locationState = models.CharField(max_length=30, null=True, blank=True)
locationCountry = models.CharField(max_length=50, null=True, blank=True)
latitude = models.CharField(max_length=200, null=True, blank=True)
longitude = models.CharField(max_length=200, null=True, blank=True)
statusCode = models.CharField(max_length=200, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.trailer.trailerNumber
Модель прицепа
class TrailerTrip(models.Model):
trailer = models.OneToOneField(Trailer, on_delete=models.CASCADE)
shipment = models.OneToOneField(Shipment, on_delete=models.PROTECT, null=True, blank=True)
dateYardEmpty = models.DateField(null=True, blank=True)
dateDrayPickedUp = models.DateField(null=True, blank=True)
dateDrayReturnedLoaded = models.DateField(null=True, blank=True)
dateCarrierPickedUpLoaded = models.DateField(null=True, blank=True)
dateCarrierDelivered = models.DateField(null=True, blank=True)
dateCarrierReturnedEmpty = models.DateField(null=True, blank=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.trailer.trailerNumber
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.dateCarrierReturnedEmpty is not None:
createTripReport(self.id, self.shipment.id, self.trailer.id)
resetTrailerTrip(self.id)
if self.dateCarrierDelivered is not None:
shipment = Shipment.objects.get(id=self.shipment.id)
shipment.loadDelivered = True
shipment.save()
Это охватывает все возможные Модели, которые могут быть вовлечены в ошибку, с которой я сталкиваюсь. Теперь я покажу представление для trailer-locations/
TrailerLocations View
@login_required(login_url="/login/")
def trailerLocations(request):
trailers = trailerLocQuery()
timestamp = trailers[0]['trailerlocation__updated_at']
context = {'trailers': trailers, 'timestamp': timestamp}
if request.method == 'POST':
if 'refresh' in request.POST:
updateTrailerLocations()
return redirect('trailerLocations')
if 'email' in request.POST:
sendLocEmail()
return redirect('trailerLocations')
if 'csv' in request.POST:
createCsv()
return redirect('trailerLocations')
return render(request, "home/trailer-location-list.html", context)
TrailerLocQuery(), упомянутый в представлении выше
def trailerLocQuery():
trailers = Trailer.objects.all().values(
'trailerNumber',
'id',
'trailerlocation__locationCity',
'trailerlocation__locationState',
'trailerlocation__locationCountry',
'trailerlocation__statusCode',
'trailertrip__shipment__loadNumber',
'trailertrip__shipment__destinationCity',
'trailertrip__shipment__destinationState',
'trailerlocation__updated_at',
'trailertrip__shipment__carrier',
'shipment__id'
)
# .order_by('-trailerlocation__statusCode')
return trailers