Python 是否根据当前登录的用户在Django CreateView中显示不同的默认值?
长话短说,我正在创建一个模型表单,它将被传递给一个通用的CreateView。此表单允许用户发布带有位置的事件。我已经在我的用户创建表单中收集了用户的基本地址,并且我的事件模型具有事件作者的foreignkey 我想在事件创建表单上显示当前登录用户的城市和州作为默认值。由于默认值是在模型级别设置的,因此我无法使用requests框架。解决方案,例如提供了一种在提交时将请求中的信息保存到数据库的方法,但我希望在用户首次导航到表单页面时显示此默认值。如何实现此功能 编辑我希望能够像中一样传递初始参数,但由当前登录用户动态确定 这是模型的基本部分。请注意,BusinessUser具有城市和州字段Python 是否根据当前登录的用户在Django CreateView中显示不同的默认值?,python,django,python-3.x,modelform,Python,Django,Python 3.x,Modelform,长话短说,我正在创建一个模型表单,它将被传递给一个通用的CreateView。此表单允许用户发布带有位置的事件。我已经在我的用户创建表单中收集了用户的基本地址,并且我的事件模型具有事件作者的foreignkey 我想在事件创建表单上显示当前登录用户的城市和州作为默认值。由于默认值是在模型级别设置的,因此我无法使用requests框架。解决方案,例如提供了一种在提交时将请求中的信息保存到数据库的方法,但我希望在用户首次导航到表单页面时显示此默认值。如何实现此功能 编辑我希望能够像中一样传递初始参数
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',
)
如果要动态设置初始数据,可以重写。如果不需要动态设置,只需设置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
...
用code更新作为旁白,我不确定
get_object
在这里要做什么-CreateView
不需要get_object
方法,因为对象还没有创建。明白了,我也这么认为。对我来说很有用。我实际上使用的是一个用户模型,它只定义了用户类型,然后扩展该模型以获得BusinessUser(在这里我添加了城市和州等详细信息)。因此,我必须做一些类似的事情:user\u info=BusinessUser.objects.get(pk=self.request.user.pk)
然后使用initial['location']=user\u info.city+,“+user\u info.state
从user\u info
访问城市和州字段。我认为标准用例不需要这种诡辩,所以如果您同意,我将保留这个问题。