6

助けが必要です。

私のmodels.pyには、Noteのテーブルがあります。このテーブルでやりたいのは、ユーザーが特定のクライアントのテキストフィールドにメモを入力できるフォームを作成することです。

models.py

class Note(models.Model):
    client = models.ForeignKey(Client)
    datetime = models.DateTimeField(default=datetime.now)
    user  = models.ForeignKey(User)
    note = models.TextField()

    def __unicode__(self):
        return unicode(self.user)

これで、ユーザーがメモを入力すると、メモのテキストフィールドのみが表示されます。フォームが送信されると、フォームは日付と時刻を日時に自動保存する必要があります。私はユーザーフィールドを持っているようです。フォームが送信されると、認証されたユーザーは自動保存されます。どうすればこれができるのかよくわかりません。また、クライアントも自動保存したいので、アクセスしたクライアントのページは誰でも(r'^clients/(?P<client_id>\d+)/$', views.get_client)、そのクライアントから自動保存できます。

これがforms.pyに書いたものです

forms.py

class NoteForm(forms.ModelForm):
    class Meta:
        model = models.Note
        exclude = ('client','user','datetime')

そしてここに私の見解も。

Views.py

def add_notes(request, client_id):
    client = models.Client.objects.get(pk = client_id)
    notes = client.note_set.all()
    if request.method == 'POST':
        form = forms.NoteForm(request.POST)
        if form.is_valid():
            form.save(True)
            request.user.message_set.create(message = "Note is successfully added.")
            return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")
    else:
        form = forms.NoteForm()
    return render_to_response('note_form.html', {'form':form, 'client':client,'notes':notes}, context_instance = RequestContext(request))
4

3 に答える 3

10
    if form.is_valid():
        note = form.save(commit=False)
        note.user = request.user
        note.client = client
        note.save()
于 2011-06-20T10:08:02.983 に答える
7
class NoteForm(forms.ModelForm):
    class Meta:
        model = models.Note
        exclude = ('client','user','datetime')

    def __init__(self, client, user, *args, **kwargs):
        self.client = client
        self.user = user
        super(NoteForm, self).__init__(*args, **kwargs)

    def save(self):
        note = super(NoteForm, self).save(commit=False)
        note.user = self.user
        note.client = self.client
        note.save()
        return note

そして、ビューで:

form = forms.NoteForm(client, request.user, request.POST)
于 2011-06-20T10:07:11.043 に答える
1

まず、モデルの場合:

datetime = models.DateTimeField(auto_now=True)

優れている。

今のあなたの見解のために、私はあなたが書くべきだと思います:

note = Note(client=client, user=request.user)
form = forms.NoteForm(instance=note)
于 2011-06-20T10:14:51.770 に答える