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

2024-10-02 22:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

长话短说,我正在创建一个模型表单,它将被传递给一个通用的CreateView。此表单允许用户发布带有位置的事件。我已经在我的用户创建表单中收集了用户的基址,并且我的事件模型具有事件作者的foreignkey。你知道吗

我想在事件创建窗体上显示当前登录用户的城市和州作为默认值。因为默认值是在模型级别设置的,所以我不能使用requests框架。像this one这样的解决方案提供了一种在提交时将请求中的信息保存到数据库的方法,但是我希望在用户第一次导航到表单页面时显示这个默认值。如何实现此功能?你知道吗

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

这是模型的关键部分。注意BusinessUser有city和state字段。你知道吗

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是我一直坚持的正在进行的工作。目前,它是一个模型表单,给出了模型和字段。你知道吗

class JobCreationForm(ModelForm):

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

Tags: 用户模型form表单models事件joblocation
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:00

如果要动态设置初始数据,可以重写^{}。如果您不需要动态地设置它,您可以简单地设置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

    ...

相关问题 更多 >