Opgelost: django admin automatische update datumveld

Het grootste probleem is dat het datumveld voor automatische updates niet correct wordt afgehandeld door Django. Als u het datumveld probeert bij te werken met behulp van de beheerdersinterface, zal Django automatisch alle velden in de tabel met dezelfde naam bijwerken, inclusief het automatisch bijgewerkte datumveld. Dit kan leiden tot onverwachte en mogelijk onjuiste wijzigingen in uw gegevens.

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>

Wat is het veld Automatisch bijwerken

Het veld "Auto update" is een booleaans veld in de tabel "instellingen" van een Django-project. Indien ingesteld op True, zal Django automatisch controleren op updates van de instellingenbestanden van het project en, als er nieuwe instellingen worden gevonden, de instellingenbestanden van het project bijwerken.

Gerelateerde berichten:

Laat een bericht achter