해결됨: django 관리자 자동 업데이트 날짜 필드

주요 문제는 자동 업데이트 날짜 필드가 Django에서 제대로 처리되지 않는다는 것입니다. 관리 인터페이스를 사용하여 날짜 필드를 업데이트하려고 하면 Django는 자동 업데이트 날짜 필드를 포함하여 동일한 이름을 가진 테이블의 모든 필드를 자동으로 업데이트합니다. 이로 인해 데이터가 예기치 않게 잘못 변경될 수 있습니다.

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>

자동 업데이트 필드란?

"자동 업데이트" 필드는 Django 프로젝트의 "설정" 테이블에 있는 부울 필드입니다. True로 설정하면 Django는 프로젝트 설정 파일의 업데이트를 자동으로 확인하고 새 설정이 발견되면 프로젝트 설정 파일을 업데이트합니다.

관련 게시물:

코멘트 남김