как правильно написать вспомогательные функции django, чтобы проверить наличие новых строк и были ли изменены данные?

#python #django #helper

Вопрос:

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

 is_new_row - will understand if the row is new and add it to an array that will be bulk created

is_data_modified - will look for the row in the old data and understand if the data of that row is changed and will update only if its changed
 
 
old_data = Person.objects.all() 


    for row in api_data:
        if is_new_row(row, old_data):
            new_rows_array.append(row)
        else:
            if is_data_modified(row, old_data):
                ...
                # do the update
            else:
                continue
 

помощники

 def is_new_row(row, old_data):
    ??

def is_data_modified(row, old_data): 
    ?? 
 

Комментарии:

1. как вы распознаете, когда данные являются новыми? Как вы получаете эти данные? Обычно у человека нет нового объекта ID/pk , но Django уже использует его для создания новых или обновления данных в базе данных, и вам не нужно делать это самостоятельно.

2. @furas использует один подход old_data = Person.objects.all() , но я также могу использовать какой-то var, созданный = get_or_created, если он новый или нет

3. в первый момент я не видел, что вы получаете данные извне api_data — но данные должны иметь некоторые уникальные значения, которые никогда не меняются — т. Е. ID — а затем вы должны искать это ID в базе данных и INSERT или UPDATE . Если вы можете изменить каждое поле в строке, вы можете изменить все значения в строке, и вы не знаете, следует ли вам вставлять как новое или заменять другой строкой..

4. точно, но как мне написать своим помощникам, чтобы они это сделали? Я просто пытаюсь отследить, сравнить старые данные с новыми , и если они новые

5. как и любой другой запрос в базе Person.objects.select(id=row.id) данных, и если вы не получите результата, вам придется создать новый Person и save() его. Если вы получите результат person , то поместите в него новые значения person и также используйте save() его.