Отобразить другое значение по умолчанию в Django CreateView в соответствии с текущим вошедшим пользователем? - PullRequest
0 голосов
/ 25 апреля 2018

Короче говоря, я создаю ModelForm, который будет передан в универсальный CreateView.Эта форма позволит пользователю опубликовать событие с указанием местоположения.Я уже собрал базовый адрес пользователя в своей форме создания пользователя, и в моей модели события есть чужой ключ к автору события.

Я хотел бы отобразить город и штат текущего пользователя, вошедшего в систему, какзначение по умолчанию в форме создания события.Так как значения по умолчанию установлены на уровне модели, я не могу использовать структуру запросов.Такие решения, как , это предлагают способ сохранения информации из запроса в базу данных при отправке, но я хотел бы отобразить это значение по умолчанию, когда пользователь впервые переходит на страницу формы.Как мне добиться этой функциональности?

Редактировать Я хотел бы иметь возможность передать начальный параметр, как в в этом сообщении , но динамически определять его в соответствии с текущим протоколированиему пользователя.

Вот основная часть модели.Обратите внимание, что BusinessUser имеет поля города и штата.

class Job(models.Model):
    author = models.ForeignKey(BusinessUser, on_delete = models.CASCADE)
    location = models.CharField(max_length=200, blank=True, help_text="If different from the location listed on your company profile.")

И вот пока что это представление:

class JobCreation(LoginRequiredMixin, SuccessMessageMixin, generic.edit.CreateView):
    model = Job
    form_class = JobCreationForm
    context_object_name = 'job'
    success_url = reverse_lazy('jobs:business_profile')
    success_message = 'New job posted!'

def form_valid(self, form):
    form.instance.author = self.request.user
    return super().form_valid(form)

JobCreationForm - это работа, над которой я застрял.На данный момент это ModelForm, предоставляющий модель и поля.

class JobCreationForm(ModelForm):

    class Meta:
        model = Job
        fields = (
            'job_title',
            'location',         
        )

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете переопределить get_initial, если вы хотите установить начальные данные динамически.Если вам не нужно устанавливать его динамически, вы можете просто установить initial.

class JobCreation(LoginRequiredMixin, SuccessMessageMixin, generic.edit.CreateView):
    model = Job
    form_class = JobCreationForm

    def get_initial(self):
        initial = super().get_initial()
        initial['location'] = self.request.user.location
        return initial

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