Python Django表单希望自动保存用户、客户端和日期时间

Python Django表单希望自动保存用户、客户端和日期时间,python,django,forms,autosave,Python,Django,Forms,Autosave,我需要一些帮助 在my models.py中,我有一张表格可供记录。我想对这个表做的是创建一个表单,用户可以在其中为特定客户机的文本字段中输入一些注释 型号.py class Note(models.Model): client = models.ForeignKey(Client) datetime = models.DateTimeField(default=datetime.now) user = models.ForeignKey(User) note

我需要一些帮助

在my models.py中,我有一张表格可供记录。我想对这个表做的是创建一个表单,用户可以在其中为特定客户机的文本字段中输入一些注释

型号.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)
class NoteForm(forms.ModelForm):
    class Meta:
        model = models.Note
        exclude = ('client','user','datetime')
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))
现在,当用户输入注释时,他们应该只查看注释文本字段。提交表单后,表单应自动将日期+时间保存为任何时间和日期。 我似乎对用户字段有点不满意。提交表单后,应自动保存经过身份验证的用户。我真的不知道你怎么能做到这一点。我还想自动保存客户机,以便从客户机自动保存您曾经访问过的客户机页面
(r'^clients/(?P\d+/$),views.get_client)

这是我在表格里写的

forms.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)
class NoteForm(forms.ModelForm):
    class Meta:
        model = models.Note
        exclude = ('client','user','datetime')
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))
这也是我的观点

视图.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)
class NoteForm(forms.ModelForm):
    class Meta:
        model = models.Note
        exclude = ('client','user','datetime')
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))
def添加注释(请求、客户id):
client=models.client.objects.get(pk=client\u id)
notes=client.note\u set.all()
如果request.method==“POST”:
form=forms.NoteForm(request.POST)
如果form.is_有效():
表单保存(True)
request.user.message\u set.create(message=“Note已成功添加。”)
返回HttpResponse(“window.opener.location=window.opener.location;window.close();”)
其他:
form=forms.NoteForm()
返回render_to_response('note_form.html',{'form':form,'client':client,'notes':notes},context_instance=RequestContext(请求))
鉴于:

form = forms.NoteForm(client, request.user, request.POST)

首先,对于您的模型:

datetime = models.DateTimeField(auto_now=True)
这样更好

对于你现在的观点,我认为你应该写:

note = Note(client=client, user=request.user)
form = forms.NoteForm(instance=note)

为什么
auto\u now\u add
更好?当此属性之一为True时,auto\u now\u add和auto\u now使字段不可编辑。只是更具可读性。虽然所有这些答案可能都是正确的,但只能有一个赢家。Daniels方法似乎是解决此问题的最佳方法。@Shehzad009我同意Daniel提供了最佳答案,但我非常确定此代码应该是在表单中,而不是在视图中。最佳答案在我看来,此代码在模型表单本身中是最佳的,因此可以循环使用.save()重写,而不是以后在每个视图中键入它。