Rozwiązany: pole daty automatycznej aktualizacji administratora django

Głównym problemem jest to, że pole daty automatycznej aktualizacji nie jest poprawnie obsługiwane przez Django. Jeśli spróbujesz zaktualizować pole daty za pomocą interfejsu administratora, Django automatycznie zaktualizuje wszystkie pola w tabeli o tej samej nazwie, w tym pole daty automatycznej aktualizacji. Może to prowadzić do nieoczekiwanych i potencjalnie nieprawidłowych zmian w danych.

I have a model with a date field. I want to automatically update the date field when an object is created or edited in the admin panel. How can I do this?


A:

You can override <code>save_model</code> method of your admin class and set the value of <code>date</code> field to <code>datetime.now()</code>. 
<blockquote>
<p><strong><a href="https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin" rel="nofollow noreferrer">ModelAdmin</a></strong></p>
<p><strong><a href="https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django-contrib-admin-options-modeladmin-save_model" rel="nofollow noreferrer">save_model()</a></strong></p>
<p>[...] This method should save the object and return the new instance.</p>
</blockquote>
Example: 
<code>class MyModelAdmin(admin, ModelAdmin):

    def save_model(self, request, obj, form, change):

        if not change: # obj is being created for first time (i e., it's new)

            obj = super().save_model(request, obj, form, change) # create object first

            # now set your custom values here... 

            obj = super().save_model(request, obj, form=form._meta['fields'], change=change) # update object with custom values    

        else: # existing object is being edited (i e., it's not new)    

            # now set your custom values here... 

            obj = super().save_model(request, obj=obj._meta['fields'], form=form._meta['fields'], change=change) # update object with custom values        

        return obj  
</code>

Co to jest pole automatycznej aktualizacji

Pole „Automatyczna aktualizacja” jest polem boolowskim w tabeli „ustawienia” projektu Django. Po ustawieniu na True, Django automatycznie sprawdzi aktualizacje plików ustawień projektu i, jeśli zostaną znalezione nowe ustawienia, zaktualizuje pliki ustawień projektu.

Powiązane posty:

Zostaw komentarz