반응형
프로젝트를 하면서 option에서 선택한 값을 어드민 사이트로 보낸 후 어드민 사이트에서 수락을 누르면 DB에 저장이 되고 거절을 누르면 삭제되는 기능을 구현하였다.
HTML 구조
<select class="recommend_select" name="main">
<option value="">메인분류</option>
<option value="밥">밥</option>
<option value="빵">빵</option>
<option value="면">면</option>
</select>
구현 과정
선택된 값들을 POST 요청으로 서버로 보내기
선택된 값들을 서버로 보내기 위해서는 많은 방법이 있지만 나는 버튼에 onclick 이벤트를 주어 자바스크립트를 통해서 서버로 보내주었다.
function sendData() {
var name = document.querySelector('.recommend_name').value;
var main = document.querySelector('[name=main]').value;
var soup = document.querySelector('[name=soup]').value;
var spicy = document.querySelector('[name=Spicy]').value;
var temperature = document.querySelector('[name=temperature]').value;
var weight = document.querySelector('[name=weight]').value;
if (name && main && soup && spicy && temperature && weight) {
$.ajax({
url: '/recommend/',
data: {
'name': name,
'main': main,
'soup': soup,
'spicy': spicy,
'temperature': temperature,
'weight': weight,
},
method: "POST",
success: function (data){
location.replace("")
},
error: function (request, status, error){
console.log("에러");
},
complete: function (){
console.log("완료");
}
});
}
else if(!name || !main || !soup || !spicy || !temperature || !weight) {
alert('모든 옵션을 선택해주세요!');
}
}
서버에서 POST 요청을 처리해서 DB에 새로운 데이터 추가하기
- POST 요청을 처리하는 view함수 작성
- POST요청에서 선택된 값들 추출
- DB모델에 새로운 데이터 추가
def recommend(request):
if request.method == 'POST':
name = request.POST.get('name')
main = request.POST.get('main')
soup = request.POST.get('soup')
spicy = request.POST.get('spicy')
temperature = request.POST.get('temperature')
weight = request.POST.get('weight')
approved = False
print(name,main,soup,spicy,temperature,weight,approved)
FoodList.objects.create(name=name, main=main, soup=soup, Spicy=spicy, temperature=temperature, weight=weight, approved=approved)
return redirect('recommendname')
return render(request, 'content/recommend.html')
서버에서 DB모델 삭제하기
서버에서 FoodList모델을 삭제하는 기능은 장고의 admin 사이트를 이용하여 구현하였습니다. 어드민 사이트에서는 모델 데이터를 생성, 수정, 삭제할 수 있는 기능을 제공합니다. 모델 데이터를 삭제하기 위해서는 해당 모델을 등록하는 admin.py파일에서 ModelAdmin 클래스의 delete_selected 메서드를 오버라이딩해줘야합니다.
class FoodListAdmin(admin.ModelAdmin):
list_display = ['name', 'main', 'soup', 'Spicy', 'temperature', 'weight']
list_filter = ['main', 'soup', 'Spicy', 'temperature', 'weight']
actions = ['DB에 추가', 'DB에서 삭제']
def accept_recommend(self, request, queryset):
for food in queryset:
food.accepted = True
food.save()
def reject_recommend(self, request, queryset):
queryset.delete()
admin.site.register(FoodList, FoodListAdmin)
반응형
'Django > DRF' 카테고리의 다른 글
login - logout 기능 구현 (0) | 2023.03.21 |
---|---|
user/models.py - user모델 만들기 (0) | 2023.03.21 |
QuerySet의 값들을 쿠키에 저장하기 (0) | 2023.02.23 |
[Django] render 와 redirect 의 차이점과 사용법 (0) | 2023.02.23 |
Forbidden (CSRF token missing or incorrect.) 해결 방법 (0) | 2023.02.20 |