Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django last updated在没有新信息时不断更新_Python_Django - Fatal编程技术网

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'])
如果不存在,请向表中添加新记录。 如果确实存在,请检查可能更改的字段是否已更新,如果未更新,则不执行其他操作进行更新。

it
update\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)