Đã giải quyết: trường ngày cập nhật tự động của quản trị viên django

Vấn đề chính là trường ngày cập nhật tự động không được Django xử lý đúng cách. Nếu bạn cố cập nhật trường ngày bằng giao diện quản trị, Django sẽ tự động cập nhật tất cả các trường trong bảng có cùng tên, bao gồm cả trường ngày tự động cập nhật. Điều này có thể dẫn đến những thay đổi không mong muốn và có khả năng không chính xác đối với dữ liệu của bạn.

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>

Trường cập nhật tự động là gì

Trường “Cập nhật tự động” là trường boolean trong bảng “cài đặt” của dự án Django. Khi được đặt thành True, Django sẽ tự động kiểm tra các bản cập nhật cho tệp cài đặt của dự án và nếu tìm thấy bất kỳ cài đặt mới nào, sẽ cập nhật tệp cài đặt của dự án.

bài viết liên quan:

Để lại một bình luận