Вопрос по Django: Как я могу отправить форму с зарегистрированным пользователем по умолчанию?

После регистрации вас приглашают на страницу входа, а после входа вас перенаправляют на другую страницу, которая содержит форму, используемую для сбора дополнительной информации о новом пользователе. Проблема в том, что форма не отправляется, если я не указываю экземпляр {{form.user}} в html-файле. Возможно, это происходит потому, что по умолчанию user_id не распознается. Когда я указываю его, форма позволяет мне выбирать из уже существующих пользователей, а я бы хотел, чтобы по умолчанию выбирался пользователь, вошедший в систему.

модели

class AdditionalInfoModel(models.Model):
    objects = None
    skill_choices = (('Beginner', 'BEGINNER'),
                 ('Intermediate', 'INTERMEDIATE'),
                 ('Expert', 'EXPERT'))

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    location = models.CharField(max_length=30, blank=True)
    assumed_technical_ski_level = models.CharField(max_length=30, choices=skill_choices)
    years_of_experience = models.PositiveIntegerField(blank=True)
    money_to_spend = models.PositiveIntegerField(blank=True)
    def __str__(self):
        return self.user.username

вход и регистрация осуществляются с помощью стандартных моделей django

Предлагаю использовать поле disabled и установить начальное значение пользователя через метод initializer формы. Отключенные поля полностью игнорируются в POST запросах, поэтому пользователь не сможет изменить пользователя по умолчанию, которого вы установили через это поле.

Документация Django по атрибуту disabled: https://docs.djangoproject.com/en/4.0/ref/forms/fields/#disabled

views.py

class CreateInfoView(LoginRequiredMixin, CreateView):
    model = AdditionalInfoModel

    form_class = AdditionallnfoModelForm
    template_name = "user_ski_experience/additional_info.html"
    
    def get_form_kwargs(self):
        variable_to_send = super(CreateInfoView, 
        self).get_form_kwargs()
        variable_to_send.update({'pk': None})
        variable_to_send.update({'pk_user': self.request.user.pk})
        return variable_to_send

    def get_success_url(self):
        return reverse('aplicatie2:home')

forms.py

class AdditionallnfoModelForm(forms.ModelForm):
    class Meta:
        model = AdditionalInfoModel
        fields = '__all__'

    def __init__(self, pk, *args, **kwargs):
        pk_user = kwargs.pop('pk_user')
        super(AdditionallnfoModelForm, self).__init__(*args, 
        **kwargs)
        self.pk = pk

        # Make the user field readonly
        self.fields['user'].disabled = True
        self.fields['user'].initial = pk_user

    def clean(self):
        return self.cleaned_data
Вернуться на верх