単なるメモ機能が作れて感動した話
まあ一応つけとくか〜〜ぐらいで作り始めたメモ機能。
こいつにめちゃ苦しめられました。
でもおかげでGETとかPOSTとかのHTTPレスポンスのあたりのお話がちょっとわかった気になったのでよかった。
<成果物>
これにメモを書いて更新を押すと、ずっと保存されます。
<コード>
models.py
class Note(models.Model): worker = models.ForeignKey(Worker, null=True, blank=True) content = models.TextField(null=True, blank=True) def __str__(self): return self.worker.worker_name @classmethod def get_note(cls, worker): notes = cls.objects.filter(worker=worker) if notes.count() > 0: return notes[0] else: return None
views.py
# Djangoの組み込みモジュールをインポート from django.shortcuts import get_object_or_404, render_to_response, redirect from django.views import generic # 自分で作ったモジュールをインポート from managings.models import * import managings.forms as managings_form_module class WorkerDetailView(generic.TemplateView): model = Worker template_name = 'managings/each_worker.html' def get(self, request, *args, **kwargs): context = self.get_context_data(request, *args, **kwargs) return super(WorkerDetailView, self).render_to_response(context) def get_context_data(self, request, *args, **kwargs): context = super(WorkerDetailView, self).get_context_data(**kwargs) worker_id = args[0] target_worker = get_object_or_404(Worker, id=int(worker_id)) context{'worker'] = target_worker note = Note.get_note(target_worker) redirect_url = "/worker/{}".format(target_worker.id) content = note.content if note else "" context['note_form'] = managings_form_module.NoteForm(initial={'content':content, 'redirect_url':redirect_url, 'worker_id':target_worker.id}) return context def add_note_view(request, *args, *kwargs): form_data = request.POST if form_data: worker_id = int(args[0]) worker = get_object_or_404(Worker, id=worker_id) content = form_data['content'] note = Note.get_note(worker) if note: note.content = content else: note = Note(worker=worker, content=content) note.save() return redirect("/managings/worker/{}".format(worker_id)) else: raise Http404
forms.py
from django import forms from django.forms import ModelForm from managings.models import * class NoteForm(forms.Form): content = forms.CharField(widget=forms.Textarea(attrs={'class'="workernote-content"})) redirect_url = forms.CharField(widget=forms.HiddenInput()) worker_id = forms.CharField(widget=forms.HiddenInput())
あとはurlを設定すればできます。
<引っかかったポイント>
>>そもそも、Djangoの組み込みがどれで使い方がわかってなかった
振り返ってみると、これが全てだったような気がします。Djangoのドキュメントも読んだりしてましたが、使ってみないことには実感がわかないし、使ってみようとしたら使い方がわからないしで大変でした。今回で少し足場ができたので、ちょっとは進みがよくなりそうです。
足場が少しできた感じがするので、少しずつドキュメントももう一回読み始めようかな〜と思います。
久しぶりの投稿でした。