Как можно использовать request.user в форме модели в django?

Я хочу иметь возможность использовать request.user в модели формы init. Вот мое представление:

def create(request, pk):    
    if request.method == 'POST':
        form = CreateForm(request.POST)
        if form.is_valid():
            object = form.save()
            object.save()
            return render(request, 'going_create.html', {'object':object})
    else:
        form = CreateForm()
    return render(request, 'being_create.html', {'form':form})

В принципе, мне нужно, чтобы request.user заполнял поле формы django. Вот моя форма:

class CreateForm(forms.ModelForm):
    
    def __init__(self, *args, **kwargs):

        self.request = kwargs.pop('request')
        super(CreateForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].initial = self.request.user.first_name

    class Meta:
        model = creater
        fields = (
            'first_name',
        )

Кроме того, есть form = CreateForm(request.POST) if request.method == 'POST', и form = CreateForm() when else. Так как я не знаком с использованием представления функций, я надеюсь, что вы подскажете мне, куда мне нужно добавить код, чтобы я мог использовать request.user для предварительного заполнения поля django. Спасибо, и, пожалуйста, оставляйте любые вопросы, которые у вас есть.

Вы передаете его в качестве параметра:

class CreateForm(forms.ModelForm):
    
    def __init__(self, *args, user=None, **kwargs):
        super(CreateForm, self).__init__(*args, **kwargs)
        if user is not None:
            self.fields['first_name'].initial = user.first_name

    class Meta:
        model = creater
        fields = (
            'first_name',
        )

В представлении вы затем создаете форму с:

from django.contrib.auth.decorators import login_required

@login_required
def create(request, pk):    
    if request.method == 'POST':
        form = CreateForm(request.POST, user=request.user)
        if form.is_valid():
            object = form.save()
            return render(request, 'going_create.html', {'object':object})
    else:
        form = CreateForm(user=request.user)
    return render(request, 'being_create.html', {'form':form})

Примечание: В случае успешного POST запроса, вы должны сделать redirect. [Django-doc] для реализации паттерна Post/Redirect/Get [wiki]. Это позволяет избежать повторения POST-запроса, когда пользователь обновляет браузер. браузер.


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

Вернуться на верх