Проблемы с базой данных 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
Вернуться на верх