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