根据当前登录用户在 Django CreateView 中显示不同的默认值?

Display a different default value in Django CreateView according to current logged in user?

长话短说,我正在创建一个将传递给通用 CreateView 的 ModelForm。此表单将允许用户 post 具有位置的事件。我已经在我的用户创建表单中收集了用户的基本地址,并且我的事件模型有一个指向事件作者的外键。

我想将当前登录用户的城市和州显示为活动创建表单上的默认值。由于默认值是在模型级别设置的,因此我无法使用请求框架。 this one 等解决方案提供了一种在提交时将请求中的信息保存到数据库的方法,但我想在用户首次导航到表单页面时显示此默认值。我如何实现此功能?

编辑 我希望能够像 this post 那样传递一个初始参数,但它由当前登录的用户动态确定。

这是模型的基本部分。请注意,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',         
        )

如果您想动态设置初始数据,您可以覆盖 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

    ...