Löst: django admin autouppdateringsdatumfält

Det största problemet är att fältet för automatisk uppdateringsdatum inte hanteras korrekt av Django. Om du försöker uppdatera datumfältet med hjälp av administratörsgränssnittet kommer Django automatiskt att uppdatera alla fält i tabellen med samma namn, inklusive datumfältet för automatisk uppdatering. Detta kan leda till oväntade och potentiellt felaktiga ändringar av din data.

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>

Vad är fältet Automatisk uppdatering

Fältet "Automatisk uppdatering" är ett booleskt fält i tabellen "inställningar" för ett Django-projekt. När den är inställd på True kommer Django automatiskt att söka efter uppdateringar av projektets inställningsfiler och, om några nya inställningar hittas, kommer att uppdatera projektets inställningsfiler.

Relaterade inlägg:

Lämna en kommentar