View 만들기
지난 시간에 만들어둔 모델을 마이그레이트 해준다
python manage.py makemigrations
python manage.py migrate
class profileCreateView(CreateView):
model = Profile
context_object_name = 'target_user'
form_class = ProfileCreationForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'profileapp/create.html'
Python
복사
profileapp/create.html도 만들어준다
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div style = "text-align: center; max-width: 600px; margin: 4rem auto">
<div class="mb-4">
<h4><Profile Create/h4>
</div>
<form action="{% url 'profileapp:create' %}" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class="btn btn-dark rounded-pill col-6 mt-3">
</form>
</div>
{% endblock %}
Python
복사
path도 설정해준다
path('create/', ProfileCreateView.as_view(), name='create'),
Python
복사
accountapp/detatil.html에서 Profile Create로 연결할 수 있는 경로를 만들어준다
{% if target_user.profile %}
<h2 style="font-family:: 'NanumSquareB'">
{{ target_user.profile.nickname }}
</h2>
{% else %}
<a href="{% url 'profileapp:create' %}">
<h2 style="font-family:: 'NanumSquareB'">
Create Profile
</h2>
</a>
{% endif %}
Python
복사
위와같이 입력한 후, 사진을 넣고 프로필을 저장하면 에러가 나온다
profileapp/create.html의 form action에 문제가 있는데,
image파일등을 받을때 폼에 enctype을 명시를 해줘야한다.
<form action="{% url 'profileapp:create' %}" method="post" enctype="multipart/form-date">
Python
복사
다음엔 프로필 앱에 id를 받을 수 있게 해줘야한다.
class ProfileCreateView(CreateView):
model = Profile ...
def form_valid(self, form):
temp_profile = form.save(commit=Fasle)#실제 데이터베이스엔 저장하지 않고, temp_profile에 임시로 저장한다
temp_profile.user = self.request.user
tenp_profile.save()
retrun super().form_valid(form)
Python
복사