장고:클래스형 뷰, 제네릭 뷰: 두 판 사이의 차이
(→Mixin) |
(→클래스형 뷰) |
||
3번째 줄: | 3번째 줄: | ||
작정하고 장고의 코드를 참고해 살펴보는 게 좋겠다. | 작정하고 장고의 코드를 참고해 살펴보는 게 좋겠다. | ||
== 옮기다 말았음. == | |||
= | |||
== | |||
== | ===Mixin[따로 목차를 분류해야겠네;]=== | ||
=Mixin[따로 목차를 분류해야겠네;]= | |||
클래스 뷰를 사용할 때 특정한 기능이 다른 뷰로 분리되어 있을 때. 예컨대, DetailView에선 form이 없기 때문에 댓글을 쓸 수가 없다. 이땐 다중상속을 받아 기능을 구현할 수 있다.<syntaxhighlight lang="python"> | 클래스 뷰를 사용할 때 특정한 기능이 다른 뷰로 분리되어 있을 때. 예컨대, DetailView에선 form이 없기 때문에 댓글을 쓸 수가 없다. 이땐 다중상속을 받아 기능을 구현할 수 있다.<syntaxhighlight lang="python"> | ||
class 뷰이름(DetailView, FormMixin): | class 뷰이름(DetailView, FormMixin): | ||
165번째 줄: | 17번째 줄: | ||
<br /> | <br /> | ||
=== MultipleObjectMixin === | ===MultipleObjectMixin=== | ||
여러 오브젝트를 다루기 위한 믹스인.<syntaxhighlight lang="python"> | 여러 오브젝트를 다루기 위한 믹스인.<syntaxhighlight lang="python"> | ||
class 뷰이름(DetailView, MultipleObjectMixin): | class 뷰이름(DetailView, MultipleObjectMixin): | ||
178번째 줄: | 30번째 줄: | ||
<br /> | <br /> | ||
== RedirectView == | ==RedirectView== | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
class 뷰이름(RedirectView): | class 뷰이름(RedirectView): | ||
191번째 줄: | 43번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= 구독 기능 = | =구독 기능= | ||
찬찬히 보면서 옮기자.. 문제를 풀었는가 여부도 이걸로 구현 가능할듯. | 찬찬히 보면서 옮기자.. 문제를 풀었는가 여부도 이걸로 구현 가능할듯. | ||
204번째 줄: | 56번째 줄: | ||
filter(user=user, project=객체명) 형태로 일치하는지 여부만 찾으면 된다. | filter(user=user, project=객체명) 형태로 일치하는지 여부만 찾으면 된다. | ||
<br /> | |||
===필터 이후 처리=== | |||
=== 필터 이후 처리 === | |||
필터링으로 구독관계 객체를 불러왔다곤 하지만, 이것이 구독한 객체를 보여주지 않는다. 이를 위해 .values_list('모델명')이 쓰인다. | 필터링으로 구독관계 객체를 불러왔다곤 하지만, 이것이 구독한 객체를 보여주지 않는다. 이를 위해 .values_list('모델명')이 쓰인다. | ||
219번째 줄: | 63번째 줄: | ||
그럼 이를 불러오려는 모델처럼 다룰 수 있다. | 그럼 이를 불러오려는 모델처럼 다룰 수 있다. | ||
===아이디어=== | |||
=== 아이디어 === | |||
게시글목록 중 글 자체에 대한 것과, 검색부분과... 다 따로만드는 게 좋을 듯하다. 글 자체에 대한 건 즐겨찾기 한 문제들을 불러올 수 있잖아. 옵션에 따라 글부분만 달리 나타낼 수도 있고. | 게시글목록 중 글 자체에 대한 것과, 검색부분과... 다 따로만드는 게 좋을 듯하다. 글 자체에 대한 건 즐겨찾기 한 문제들을 불러올 수 있잖아. 옵션에 따라 글부분만 달리 나타낼 수도 있고. | ||
<br /> | <br /> |
2021년 6월 25일 (금) 14:52 기준 최신판
장고! 웹 프레임워크! 틀:장고
작정하고 장고의 코드를 참고해 살펴보는 게 좋겠다.
옮기다 말았음.[편집 | 원본 편집]
Mixin[따로 목차를 분류해야겠네;][편집 | 원본 편집]
클래스 뷰를 사용할 때 특정한 기능이 다른 뷰로 분리되어 있을 때. 예컨대, DetailView에선 form이 없기 때문에 댓글을 쓸 수가 없다. 이땐 다중상속을 받아 기능을 구현할 수 있다.
class 뷰이름(DetailView, FormMixin):
form_class = 폼이름
...
def form_valid(self, form):
...
writer = self.request.user
return super().form_valid(form)
위와 같이 Mixin으로 없는 기능을 가져다 넣어 사용할 수 있다.
MultipleObjectMixin[편집 | 원본 편집]
여러 오브젝트를 다루기 위한 믹스인.
class 뷰이름(DetailView, MultipleObjectMixin):
form_class = 폼이름
...
paginate_by = 10
def get_context_data(self, **kwargs):
object_list = 모델.objects.filter(필터링조건)
return super(뷰이름,self).get_context_data(object_list=object_list, **kwargs)
본문과 리스트를 동시에 띄우기 위한 작업이다.
RedirectView[편집 | 원본 편집]
class 뷰이름(RedirectView):
def get_redirect_url(self, *args, **kwargs):
return 보낼 주소
def get(self, request, *args, **kwargs):
object = get_object_or_404(모델, pk=키값)
구독 기능[편집 | 원본 편집]
찬찬히 보면서 옮기자.. 문제를 풀었는가 여부도 이걸로 구현 가능할듯.
유저와 프로젝트를 포린키로 가져온다.
모델작성
class 모델명(models.Model):
class Meta:
unique_together = ('속성1', '속성2')
이 둘의 조합은 오직 하나만 존재하도록 설정한다. 이 모델을 filter로 불러와 유저와 객체가 일치하는 것을 찾아 구독관계를 찾곤 한다.
filter(user=user, project=객체명) 형태로 일치하는지 여부만 찾으면 된다.
필터 이후 처리[편집 | 원본 편집]
필터링으로 구독관계 객체를 불러왔다곤 하지만, 이것이 구독한 객체를 보여주지 않는다. 이를 위해 .values_list('모델명')이 쓰인다.
객체 = ...filter(조건).values_list('모델명') 형태로 쓰면 필터에 걸린 것들 중 해당 모델에 해당하는 것을 가져온다.(제한적으로 쓰일 것 같지만, 강력하고 어려운 개념이네;)
그럼 이를 불러오려는 모델처럼 다룰 수 있다.
아이디어[편집 | 원본 편집]
게시글목록 중 글 자체에 대한 것과, 검색부분과... 다 따로만드는 게 좋을 듯하다. 글 자체에 대한 건 즐겨찾기 한 문제들을 불러올 수 있잖아. 옵션에 따라 글부분만 달리 나타낼 수도 있고.