Django: использование текущего пользователя в качестве внешнего ключа для модели проектов - PullRequest
1 голос
/ 26 марта 2020

Я создаю веб-приложение, в котором люди могут писать проекты. Проекты хранятся в модели, и я хочу использовать пользователя в качестве внешнего ключа, чтобы я мог показать пользователю его проекты на веб-странице. Экземпляры вводятся через форму.

Код всегда назначает значение по умолчанию (1), а не пользователя. Может кто-нибудь из вас видит причину этой ошибки?

Вот код для создания модели в models.py:

class PersonalProject(models.Model):
    user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField()
    code = models.TextField()

def __str__(self):
    return self.title

Вот код для представления формы для создания проект в views.py:

def newproject(request):

    if User is None:
        messages.error(request, "Must be signed in")
        return redirect('main:dashboard')

    if request.method == "POST":
        form = NewProjectForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('main:dashboard')
        else:
            messages.error(request, "Error")
    else:
        form = NewProjectForm()

    return render(request,
                "main/newproject.html",
                {"form":form})

Вот код для представления домашней страницы в views.py:

def dashboard(request):
    messages.info(request, request.user.username)
    return render(request=request,
                template_name="main/dashboard.html",
                context={"structuredprojects": StructuredProject.objects.all(), "personalprojects": PersonalProject.objects.filter(user__username=request.user.username)})

Я действительно надеюсь, что вы можете помочь - я застрял на этом на некоторое время

1 Ответ

0 голосов
/ 26 марта 2020

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

from django.contrib.auth.decorators import login_required

@login_required
def newproject(request):
    if request.method == "POST":
        form = NewProjectForm(request.POST, request.FILES)
        if form.is_valid():
            <b>form.instance.user = request.user</b>
            form.save()
            return redirect('main:dashboard')
        else:
            messages.error(request, "Error")
    else:
        form = NewProjectForm()

    return render(request,
                "main/newproject.html",
                {"form":form})

Примечание : вы можете ограничить просмотры для аутентифицированных пользователей. с помощью декоратора @login_required [Django -doc] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...