Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否根据当前登录的用户在Django CreateView中显示不同的默认值?_Python_Django_Python 3.x_Modelform - Fatal编程技术网

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

Python 是否根据当前登录的用户在Django CreateView中显示不同的默认值?,python,django,python-3.x,modelform,Python,Django,Python 3.x,Modelform,长话短说,我正在创建一个模型表单,它将被传递给一个通用的CreateView。此表单允许用户发布带有位置的事件。我已经在我的用户创建表单中收集了用户的基本地址,并且我的事件模型具有事件作者的foreignkey 我想在事件创建表单上显示当前登录用户的城市和州作为默认值。由于默认值是在模型级别设置的,因此我无法使用requests框架。解决方案,例如提供了一种在提交时将请求中的信息保存到数据库的方法,但我希望在用户首次导航到表单页面时显示此默认值。如何实现此功能 编辑我希望能够像中一样传递初始参数

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

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

编辑我希望能够像中一样传递初始参数,但由当前登录用户动态确定

这是模型的基本部分。请注意,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是我一直坚持的正在进行的工作。目前,它是一个模型表单,提供了模型和字段

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
访问城市和州字段。我认为标准用例不需要这种诡辩,所以如果您同意,我将保留这个问题。