python - 无法在 View 中设置 Django 表单的字段值

标签 python django forms django-views django-forms

我正在制作一个待办事项网站,不同的用户可以登录并拥有各自的待办事项列表,但是当用户登录并将任务添加到列表中时,该任务不会分配给任何用户,因此尽管存在在数据库上,它不会显示在用户列表中。

我试图在表单提交后为表单对象(task_form)分配一个用户,我认为这就是问题所在,但我不知道还能尝试什么。

views.py

@login_required(login_url='todo:login')
def task_add(request):
    if(request.method == "POST"):
        task_form = AddTask(request.POST)
        if(task_form.is_valid()):

            task_form.cleaned_data['user'] = request.user #trying to assign a user after all the data has been populated

            task_form.save()
            return redirect('todo:index')
    return render(request,'todo/task_add.html')

模板(task_add.html)

{% block body %}
    <form method="POST">
        {% csrf_token %}
        <p><label for="title">Title</label>
        <input type="text" name="title"></p>
        <p><label for="desc">Description</label>
        <input type="text" name="desc"></p>
        <p><label for="start_time">Time</label>
        <input type="datetime-local" name="start_time"></p>
        <p><label for="completed">Complete</label>
        <input type="radio" name="completed"></p>
        <input type="submit" value="Add" name="submit" class="btn btn-success">
    </form>
{% endblock %}

models.py

class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
    title = models.CharField(max_length=50)
    desc = models.CharField(max_length=100,null=True,blank=True)
    start_time = models.DateTimeField(auto_now=False,auto_now_add=False,null=True,blank=True)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

forms.py

class AddTask(forms.ModelForm):
    class Meta:
        model = Task
        fields = '__all__'

最佳答案

您可以设置包装在表单中的 .instance.user 属性:

@login_required(login_url='todo:login')
def task_add(request):
    if request.method == 'POST':
        task_form = AddTask(request.POST)
        if task_form.is_valid():
            task_form<b>.instance.user = request.user</b>
            task_form.save()
            return redirect('todo:index')
    return render(request,'todo/task_add.html')

关于python - 无法在 View 中设置 Django 表单的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67524968/

相关文章:

python - 从 Linux 命令或 Python 脚本中提取产品模型

jquery - 为什么在 AJAX 请求中使用 @csrf_exempt 时会收到 403 Forbidden 错误?

java - 在spring中将数据从jsp表单发送到数据库(不使用servlet)

html - 水平表单输入重叠

python - 如何加快 mongoengine 查询速度

python - Pandas,具有附加列字符串的唯一条件

c# - 从 IronPython 调用 C# 对象

linux - Django 服务器从 Mac 到 Linux 的本地端口转发

python - 制作一个循环以显示空白表格或预填表格

javascript - HTML <select> 元素发送默认选择,即使未选择