Python django last updated在没有新信息时不断更新
我有一个Python django last updated在没有新信息时不断更新,python,django,Python,Django,我有一个django模型,它更新了last\u updated字段,即使没有任何信息更改。(信息来自于通过刮刀的口述)。有时会有一个新的产品条目,或者条目的更新,或者经常没有更改。如何进行修改,使“上次更新的字段”仅在产品有新信息(或创建了新信息)时更新 模型: 通过以下方式在scraper中更新数据: product, created = Product.objects.update_or_create( unique_id=product_detail['productId'],
django
模型,它更新了last\u updated
字段,即使没有任何信息更改。(信息来自于通过刮刀的口述)。有时会有一个新的产品条目,或者条目的更新,或者经常没有更改。如何进行修改,使“上次更新的<代码>字段”仅在产品有新信息(或创建了新信息)时更新
模型:
通过以下方式在scraper中更新数据:
product, created = Product.objects.update_or_create(
unique_id=product_detail['productId'],
defaults={
'name': product_detail['productName'],
'supplier': supplier,
'region': region,
})
您需要确定的第一件事是在发生更改时最有可能更改的字段。 然后检查产品详细信息['productId']是否存在:
Product.objects.get(唯一的\u id=Product\u细节['productId'])
如果不存在,请向表中添加新记录。
如果确实存在,请检查可能更改的字段是否已更新,如果未更新,则不执行其他操作进行更新。itupdate\u或\u create
调用Model.save()
。在决定是否保存之前(调用super().save()
),您可以轻松覆盖模型的save()
方法来执行一些检查
在save()。为此:self\u old=Product.objects.get(pk=self.pk)
不要忘记捕获Product.multipleobjects返回的和Product.DoesNotExist
现在,要将self
与self\u old
进行比较,您可以比较各个字段或使用
**已更新**
如果我现在想起来。。。只需避免使用Product.objects.update\u或\u create
。以下是您应该如何更新数据:
defaults = {'name':..., 'supplier':..., ...}
try:
instance = Product.objects.get(**defaults)
# if no exception, the product doesn't need to be updated (*1)
except Product.DoesNotExist:
# the product needs to be created or updated
try:
instance = Product.objects.get(pk=product_detail['productId'])
except Product.DoesNotExist:
# needs to be created
Product(**defaults).save()
else:
# needs to be updated
instance.update(defaults)
但我知道这比更新或创建更复杂。告诉我你是否知道更好的解决方案:)谢谢,有没有更简单的方法,比如组合的get\u或\u create()和update\u或\u create()方法-在文档中看不到get\u或\u update\u或\u create()方法?我不知道。或事实上,我会用更简单的方法更新答案。谢谢。这可能是最简单的方法。我本以为他们会有一个单一的方法来解决这个问题,但也许它不像我想的那样标准。
defaults = {'name':..., 'supplier':..., ...}
try:
instance = Product.objects.get(**defaults)
# if no exception, the product doesn't need to be updated (*1)
except Product.DoesNotExist:
# the product needs to be created or updated
try:
instance = Product.objects.get(pk=product_detail['productId'])
except Product.DoesNotExist:
# needs to be created
Product(**defaults).save()
else:
# needs to be updated
instance.update(defaults)