Django generic.edit CreateView и UpdateView
я пытаюсь установить условие для пользователя, который не является задачей. сам пользователь не сможет обновить задачу, не показывая форму. это успешно в части обновления, но при создании задачи форма не показывается. как я могу это исправить?
views.py `
class TaskList(LoginRequiredMixin, ListView):
model = Task
#default name = {{object_list}}
context_object_name = 'tasks'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['tasks'] = context['tasks'].filter(user=self.request.user)
context['count'] = context['tasks'].filter(complete=False).count()
search_input = self.request.GET.get('search-area') or ''
if search_input :
context['tasks'] = context['tasks'].filter(title__icontains=search_input)
context['search_input'] = search_input
return context
class TaskCreate(LoginRequiredMixin, CreateView):
model = Task
context_object_name = 'task'
fields = ['title','description','priority','complete']
success_url = reverse_lazy('tasklist')
def form_valid(self, form):
form.instance.user=self.request.user
return super(TaskCreate,self).form_valid(form)
#create a new form to exclude certain fields on model while updating
class PostFormUpdate2(ModelForm):
class Meta:
model = Task
exclude = ('user',)
class TaskUpdate(LoginRequiredMixin, UpdateView):
model = Task
form_class = PostFormUpdate2
success_url = reverse_lazy('tasklist')
task_form.html
{% extends 'base/main.html' %}
{% block content %}
<div class="header-bar">
<a href="{% url 'tasklist' %}">← Back</a>
</div>
{% if request.user == task.user %}
<p>{{task.user}}</p>
<div class="card-body">
<form action="" method="POST">
{% csrf_token %}
{{form.as_p}}
<input class="button" type="submit" value="Update">
</form>
{% endif %}
</div>
{% endblock content %}
Создание и обновление используют одну и ту же форму. я полагаю, что не могу установить request.user равным task.user, поскольку create не принимает task в качестве параметра. что еще я могу установить? или мне нужно создать новую форму?