我正在制作一个待办事项网站,不同的用户可以登录并拥有各自的待办事项列表,但是当用户登录并将任务添加到列表中时,该任务不会分配给任何用户,因此尽管存在在数据库上,它不会显示在用户列表中。
我试图在表单提交后为表单对象(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/