작성
·
171
답변 1
0
안녕하세요 하동원님!
다시 커스터마이징 관련 질문이네요!
물론 질문주신 문제를 해결하는 여러 방법이 있겠지만
제 나름대로 편한 형식으로 답변을 드리겠습니다.
일단 queryset를 수정하는것이 주요한 목표입니다.
현재 설정되어있는 Project.objects.all() 으로는 모든 프로젝트들이 선택지에 노출되기 때문에,
해당 쿼리셋을 수정해주는것이 필수적입니다.
그래서 저는 get_form 메서드를 오버라이딩 해서 해당 내용을 구현해보겠습니다.
class ArticleCreateView(CreateView):
model = Article
form_class = ArticleCreationForm
template_name = 'articleapp/create.html'
...
def get_form(self, form_class=None):
form = super(ArticleCreateView, self).get_form()
form.fields['project'].queryset = Project.objects.filter(creator_id=self.request.user.id)
return form
이런식으로 CreateView 내부의 get_form 을 오버라이딩 해줍니다.
간단하게 설명을 하자면, form 을 가져오는 get_form 메서드가 있는데,
해당 form을 가로채서 form 내부의 project queryset을 수정해준 이후 다시 되돌려주는 방식입니다.
결과적으로 사용자에게는 필터링된 project들만 보여지게 되겠죠?
원래 다른 방법으로 한 내용을 답변 달아드렸는데,
해보니까 필터링은 되는데 제대로 작성이 되지 않더라구요 ㅠ
다른 방법으로 해서 답변 다시 남겨드립니다.
이 답변도 꼭 정답이 아니라, 다른 방법으로도 구현이 가능하다는점 알아주시구요!
아무튼 답변이 도움이 되셨으면 좋겠네요!
부족하다면 계속 질문 남겨주시고 오늘도 좋은하루 보내시길 바래요~
선생님 감사합니다
get_form이란게 있었군요.
다양한 메소드가 있는 걸 보니
cdn을 읽으면서 공부해야겠어요.
바쁘신데 감사합니다!