Django Admin에 버튼 추가

2021. 1. 7. 22:56파이썬/Django

 project 레벨에서는 템플릿 파일을 오버라이딩하여 사용할 수 있음

app 레벨에서는 템플릿 파일 url을 변경하여 사용할 수 있음

[admin.py]

from django.urls import path
..

change_list_template = 'app이름/모델명_change_list.html'
def get_urls(self) :
    urls= super().get_urls()
    my_urls = [
        path('sync/', self.sync),
    ]
    return my_urls + urls

def sync(self,request) :
    with connections['local'].cursor() as cursor :
        cursor.execute(updae_or_insert_delete_sql)
        cursor.execute('select id,col1, col2 from 테이블')
        for row in cursor.fetchall() :
            try :
                temp = 모델.objects.get(id=row[0])
                temp.컬럼1=row[1],
                temp.컬럼2=row[2]
            except :
                temp = 모델(
                    id=row[0],
                    컬럼1=row[1],
                    컬럼2=row[2]
                )
                temp.save()
                self.message_user(request, '모델(id=%s,컬럼1=%s) is created!' %(temp.id,temp.컬럼1))
    self.message_user(request, 'ㅇㅇ정보s are synced!')
    self.message_user(request, '모델s are synced!')
    return HttpResponseRedirect('../')

[/app이름/templates/app이름/모델명_change_list.html]

{% extends 'admin/change_list.html' %}
{% block object-tools %}
    <div>
        <form action='sync/' method='POST'>
            {% csrf_token %}
                <button type='submit'>Sync</button>
        </form>
    </div>
    <br>
    {{ block.super }}
{% endblock %}