Išspręsta: django admin automatinio atnaujinimo datos laukas

Pagrindinė problema yra ta, kad „Django“ netinkamai tvarko automatinio atnaujinimo datos lauką. Jei bandysite atnaujinti datos lauką naudodami administratoriaus sąsają, „Django“ automatiškai atnaujins visus lentelės laukus tuo pačiu pavadinimu, įskaitant automatinio atnaujinimo datos lauką. Tai gali sukelti netikėtų ir galimai neteisingų duomenų pakeitimų.

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>

Kas yra automatinio atnaujinimo laukas

Laukas „Automatinis atnaujinimas“ yra loginis laukas „Django“ projekto „nustatymų“ lentelėje. Kai nustatyta į „True“, „Django“ automatiškai tikrins, ar nėra projekto nustatymų failų atnaujinimų, ir, jei bus rasta naujų nustatymų, atnaujins projekto nustatymų failus.

Susijusios naujienos:

Palikite komentarą