Как получить последние объекты, созданные в моделях Django по аналогичным значениям поля? - PullRequest
0 голосов
/ 30 апреля 2019

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

Функция загрузки

Это моя функция.в views.py импортируем данные в модель Itembatch:

@method_decorator([login_required, teacher_required], name='dispatch')
class UploadedItems(ListView):
    model = ItemBatch
    ordering = ('name',)
    context_object_name = 'quizzes'
    template_name = 'classroom/teachers/item_list.html'



    def get_queryset (self):
        # queryset = self.request.user.uploaded_by
        print("----------------" + str(ItemBatch.objects.latest('time')))
        return ItemBatch.objects.filter(uploaded_by=self.request.user)

И вот эта модель:

# item upload
class ItemBatch(models.Model):

    # uploaded_by = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='uploaded_by')

    ttypes =(('Open','Open'),('Container','Container'),('Trailer','Trailer'),('All','All'))
    uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_by')
    name = models.CharField(max_length=30)
    pid = models.CharField(max_length=30)
    quantity = models.CharField(max_length=30)
    length = models.CharField(max_length=100, blank=True)
    width = models.CharField(max_length=100, blank=True)
    height = models.CharField(max_length=100, blank=True)
    volume = models.CharField(max_length=100, blank=True)
    weight = models.CharField(max_length=100, blank=True)
    truck_type = models.CharField(max_length=255,default=0, choices=ttypes)
    origin = models.CharField(max_length=100, blank=True)
    destination = models.CharField(max_length=100, blank=True)
    time = models.DateTimeField(max_length=100, blank=True,default=now)


    def __str__ (self):
        return self.name

Что я пробовал

Как видите,

print("----------------" + str(ItemBatch.objects.latest('time')))

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

Это моя база данных моделей:

1

Как вы можете видеть, я хочу разделять / различать разные партии товаров.

1 Ответ

1 голос
/ 30 апреля 2019

Для того, что я мог понять из вашего вопроса, вам может понадобиться это (без проверки). Отключите и включите USE_TZ, если его True в settings.py.

latest_item = ItemBatch.objects.latest('time') 
from django.conf import settings
settings.USE_TZ = False 
latest_items = ItemBatch.objects.filter(time__date=latest_item.time.date(), time__hour=latest_item.time.hour, time__minute=latest_item.time.minute) 
settings.USE_TZ = True

'latest_items' содержит все элементы, которые соответствуют дате, часам и минутам как последний объект ItemBatch. Если хотите, добавьте секунду, но она может не сработать, если одновременно добавлено много элементов.

...