Django отображение значения измененного поля - PullRequest
1 голос
/ 10 апреля 2020

Я создаю свой первый Django веб-сайт как почтовое отделение, которое может отслеживать элементы в базе данных. Однако у меня возникла проблема с отображением истории местоположения отслеживаемого пакета.

Я пытался использовать простую историю, но она не смотрит на значение поля, в то время как fieldtracker работает только в моей локальной оболочке. Каждый раз, когда я перезапускаю свою оболочку, история исчезает, и она не работает для всей базы данных.

Моя модель пакета

class Packages(models.Model):
    package_ID = models.IntegerField(primary_key=True)
    package_description = models.CharField(max_length=100,default="None")
    weight = models.DecimalField(max_digits=5,decimal_places=2)
    signature = models.BooleanField(default=False)
    delivery_status = models.BooleanField(default=False)
    order_date = models.DateField('Date Sent')
    sent_by = models.ForeignKey(Sender,on_delete=models.CASCADE)
    sent_to = models.ForeignKey(reciever,on_delete=models.CASCADE)
    tracker = FieldTracker()

    def __str(self):
        return self.package_ID

Моя модель package_history

class package_history(models.Model):
    package_ID = models.ForeignKey(Packages,on_delete=models.CASCADE)
    current_location = models.ForeignKey(branches,on_delete=models.CASCADE)

    def __str(self):
        return self.package

Пожалуйста, если у кого-нибудь есть идеи, как с этим справиться, это было бы очень признательно. Спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

Ваш подход почти завершен, позвольте мне немного помочь вам с этим:

class location_mark(models.Model):
   package = models.ForeignKey(Packages,on_delete=models.CASCADE, 
                               related_name='locations')
   current_location = models.ForeignKey(SomeLocationModel, on.delete=models.CASCADE)
   creation_date = models.DateTimeField(default=timezone.now, editable=False)

   def __str__(self):
      return self.package.package_ID

после того, как вы создадите несколько location_marks для пакета, вы можете просто получить всю "историю", открыв отношение как this:

package_instance.locations.all().order_by('creation_date')

будет возвращать упорядоченный набор запросов всех записанных местоположений определенного пакета. Если вам нужно, вы можете определить ее как функцию типа

def get_package_history(p_ID):
   package = Packages.objects.get(package_ID=p_ID)
   return package.locations.all().order_by('creation_date')

надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...