Как связать имя пользователя из модели пользователя с другой моделью в Django?

#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. Спасибо, кажется, это работает. Я впервые попытался использовать его, и я добавил поле пользователя в форму, которую я использовал, но, похоже, это работает не так. После того, как я удалил поле пользователя, это сработало.