model 에 바인딩된 model form view 등을 쓰게 되면 사용자 정의 필드, 혹은 값을 따로 받아서 처리하기가 약간 애매했다.
머든 방법은 있으니깐,,
form 에서 사용자 변수 필드를 hidden 으로 보내줘도 받는놈이 받아야 하는데, model 에 연결된 것들은 해당 필드만 싹 가져오니깐 내가 고생해서 올려준 필드값을 볼 수 없다.
그래서 form_valid 를 overriding 해서 미리 보고, 내부 변수에 넣어두고 사용하자.
@method_decorator(admin_required, name="dispatch")
class PartsUpdateView(BSModalUpdateView):
model = Parts
filter = ""
template_name = "devices/_modal_update.html"
form_class = PartsUpdateForm
success_message = "Parts saved."
success_url = reverse_lazy("devices:parts_list")
# def get_success_url(self):
# return self.request.META["HTTP_REFERER"]
def form_valid(self, form):
# if not self.request.is_ajax():
if self.request.POST.get("querystring"):
self.filter = "?" + self.request.POST.get("querystring")
response = super().form_valid(form)
return response
def get_success_url(self):
return reverse_lazy("devices:parts_list") + self.filter
위의 예제 처럼 form_valid 에서
self.request.POST 객체에서 내가 원하는 사용자 변수를 미리 뽑아내서 저장하고, form_valid를 리턴해 주는 형태로 구현해 사용중이다.
참고하실 분 참고, 물론 내가 참고하겠지만 나중에 기억이 나지 않을 때
Kampus Production 님의 사진, 출처: Pexels