#python #django #django-models #django-views
#python #django #django-модели #django-представления
Вопрос:
В настоящее время у меня есть представление индекса с несколькими входными тегами для имени, файла и тегов. Я пытаюсь подключить модель, которая обрабатывает это представление (имя: Загружено), к модели пользователя и связать имя пользователя вошедшего в систему пользователя с загруженной моделью.
Вот мое мнение:
def index(request):
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
else:
form = FileUploadForm
allTags = Tag.objects.all()
context = {'form': form, 'allTags': allTags}
return render(request, 'index.html', context)
и вот загруженная модель:
class Uploaded(models.Model):
objects: models.Manager()
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="users")
name = models.CharField(max_length=50)
file = models.FileField(upload_to=MEDIA_ROOT)
tags = TaggableManager()
def __str__(self):
return f"{self.name} {self.file}"
Комментарии:
1. Обратите внимание, что
objects: models.Manager()
это не имеет никакого эффекта, так и должно бытьobjects = models.Manager()
, поэтому с=
вместо:
.2. Я обнаружил, что в Stack Overflow это решение проблемы Model.objects. Часть объектов была выделена в PyCharm и выдавала мне ошибку. Решения, похоже, работают.
Ответ №1:
Вы можете «исправить» .instance
завернутый в форму с зарегистрированным пользователем:
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user
form.save()
else:
form = FileUploadForm()
allTags = Tag.objects.all()
context = {'form': form, 'allTags': allTags}
return render(request, 'index.html', context)
Примечание: вы можете ограничить просмотры представлением для аутентифицированных пользователей с помощью
@login_required
декоратор [Django-doc].
Комментарии:
1. Спасибо, кажется, это работает. Я впервые попытался использовать его, и я добавил поле пользователя в форму, которую я использовал, но, похоже, это работает не так. После того, как я удалил поле пользователя, это сработало.