如何通过相似的字段值更新在Django模型中创建的对象?

时间:2019-04-30 07:16:36

标签: python django csv django-models django-queryset

我创建了一个应用,在这里人们可以将其商品详细信息的“ csv”文件上传到服务器,然后对其执行各种操作。但是,由于每个项目都有其自己的唯一ID,因此每当上载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 个答案:

答案 0 :(得分:1)

对于我从您的问题中可以理解的内容,您可能需要这样做(无需测试)。在settings.py中禁用并启用USE_TZ(如果其为True)。

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对象。如果需要,也可以添加第二个,但是如果同时添加了许多元素,则可能不起作用。