Django表单想要自动保存用户、客户端和日期时间

6 投票
3 回答
6226 浏览
提问于 2025-04-16 19:53

我需要一些帮助。

在我的 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))

3 个回答

1

首先,关于你的模型:

datetime = models.DateTimeField(auto_now=True)

这样更好。

现在对于你的视图,我觉得你应该写:

note = Note(client=client, user=request.user)
form = forms.NoteForm(instance=note)
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)

在视图中:

10

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够清晰,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样。这种情况通常需要我们仔细检查代码,看看是不是哪里出错了。

另外,编程语言有很多特性和规则,如果不熟悉的话,可能会导致一些意想不到的结果。因此,了解这些基本概念是非常重要的。可以通过查阅文档、参考资料或者向其他人请教来加深理解。

总之,编程就像解谜一样,需要耐心和细心,遇到问题时不要急,慢慢分析,找到解决办法。

    if form.is_valid():
        note = form.save(commit=False)
        note.user = request.user
        note.client = client
        note.save()

撰写回答