Примечания следует показывать только автору

#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)