Невозможно подключить модель к пользователю в django

#django #django-models

#django #django-модели

Вопрос:

Итак, у меня есть модель с именем folder, я хочу показать всю папку, созданную текущим пользователем, в HomeView, но почему-то это не работает, я думаю, что папки не подключаются к пользователю, который их создал.

models.py

 from django.db import models
from django.contrib.auth.models import User
from django.db.models.deletion import CASCADE
from django.core.validators import MinValueValidator
from django.core.exceptions import PermissionDenied

# The Folders Model.

class Folder(models.Model):
    name = models.CharField(max_length = 250)
    parent = models.ForeignKey('self', on_delete = CASCADE, null = True, blank = True )
    cr_date = models.DateTimeField(auto_now_add = True)
    user = models.OneToOneField(to=User, on_delete=CASCADE, null=True, blank=True)
    def __str__(self):
        return "%s" % self.name
  

view.py
домашний просмотр класса (TemplateView):
имя_шаблона = «ahmed_drive/home.html «

 def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    user = self.request.user
    home_folders = Folder.objects.filter(user=user).order_by('-cr_date')
    home_files = Fileshare.objects.filter(uploaded_by=user).order_by('-id')
    context['home_folders'] = home_folders
    context['home_files'] = home_files
    return context



@method_decorator(login_required, name="dispatch")    
class FolderCreate(CreateView):
    model = Folder
    fields = ["name", "parent"]
    def formvalid():
        if form.is_valid():
            form.save()
            return redirect('home.html')
        else :
            return render(request,{'form': form})
  

home.html

 {% extends 'base.html' %}
{% block content %}

{% for Folder in home_folders %}
<h1> {{Folder.name}} </h1>
{% endfor %}

{% endblock %}
  

Комментарии:

1. показать код, в котором вы создаете новую папку

2. @AndreyMaslov привет, я отредактировал свой вопрос с помощью createview папки, пожалуйста, посмотрите

Ответ №1:

когда вы создаете папку, вы не подключаете к ней пользователя. вам нужно сделать это перед сохранением формы

 def form_valid(self, form):
    folder = form.save(commit=False)
    folder.user = request.user
    folder.save()
    return redirect('home.html')