#django #django-models #django-views #django-forms #django-templates
Вопрос:
В моем проекте по заметкам я хочу сделать так, чтобы заметки показывались только для автора объекта. Я пытаюсь решить эту проблему в течение 3 дней. Но я не мог решить эту проблему. Пожалуйста, Помогите! Заранее благодарю
view.py
@login_required(login_url='login')
def index(request):
tasks = Task.objects.all()
if request.method=='POST':
form = TaskForm(request.POST)
if form.is_valid():
obj = form.save()
obj.owner = request.user
obj.save()
return redirect('/')
form = TaskForm()
user = request
context = {
'tasks' : tasks,
'form':form,
'obj':obj
}
return render(request, 'list.html',context)
models.py
class Task(models.Model):
title = models.CharField(max_length=200)
completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
Ответ №1:
Вам Task
понадобится ForeignKey
модель пользователя, чтобы отслеживать, кто создал задачу, поэтому:
from django.conf import settings
class Task(models.Model):
title = models.CharField(max_length=200)
completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
Я думаю, что в этом случае лучше воссоздать файл миграции, который создает таблицу для Task
модели.
Теперь, когда у нас есть владелец Task
s, мы можем фильтровать с:
@login_required(login_url='login')
def index(request):
tasks = Task.objects.filter(owner=request.user)
if request.method=='POST':
form = TaskForm(request.POST, request.FILES)
if form.is_valid():
form.instance.owner = request.user
obj = form.save()
return redirect('/')
else:
form = TaskForm()
context = {
'tasks' : tasks,
'form': form
}
return render(request, 'list.html', context)