如何在Django的反馈表中包含提交日期和提交人?

2024-09-28 21:55:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序里有一张反馈表。用户必须登录才能提交反馈。要求用户在文本区域中输入反馈。提交后,我想将用户详细信息存储在submitted\ uBy字段中,并将表单的创建时间存储为submitted\ uDate(其中还包含时间)。你知道吗

我读过很多关于auto-now_add=Trueauto_now使用的讨论,但是关于这个话题有很多观点,也有点混乱。你知道吗

我使用模型表单从用户输入数据。我的不同文件如下所示:

# myapp/models.py

class Feedback(models.Model):
    content = models.TextField(max_length=100)
    submitted_by = models.ForeignKey(User)
    submitted_date = models.DateTimeField() # what do add here in arguments ?

    def __str__(self):
        return self.content + " @ " + self.submitted_date

# myapp/forms.py

class FeedbackForm(ModelForm):
    class Meta:
        model = Feedback
        fields = [ 'content' ]

# myapp/views.py
def addfeeback(request):
    if request.method == "POST":
        form = FeedbackForm(request.POST)
        if form.is_valid():
            form.save()
            # Do I need to do something here ?
            return redirect('home')
    else:
        form = FeedbackForm()
    return render(request, 'myapp/addFeedback.html', { 'form': form})

 # myapp/urls.py

 url(r'^feedback/$', core_views.addfeeback , name='add-feedback'),

 # myapp/templates/addFeedback.html

 {% extends 'registration/base.html' %}

 {% block title %} Feedback {% endblock %}

 {% block content %}
   <form method="post" >
     {% csrf_token %}
     {{ form.as_p }}
     <input type="submit" value="Submit">
   </form>
 {% endblock %}     

如果您能建议对我的代码进行相应的修改,我们将不胜感激。谢谢。你知道吗


Tags: 用户pyselfformaddreturnmodelsrequest
2条回答

你能做到的

if form.is_valid():
    obj = form.save(commit=False)
    obj.submitted_by = request.user
    obj.save()

在模型中

submitted_date = models.DateTimeField(auto_now_add=True)

使用auto_now_add没有错。但是既然你必须设置提交者和日期,那么这样做就不会有什么好处。你知道吗

不过,模式是在保存表单时使用commit=False,然后在手动保存之前修改返回的对象。你知道吗

if form.is_valid():
    obj = form.save(commit=False)
    obj.submitted_by = request.user
    obj.submitted_date = datetime.datetime.now()
    obj.save()
    return redirect('home')

相关问题 更多 >