gpt4 book ai didi

django基于类的 View -UpdateView-在处理表单时如何访问请求用户?

转载 作者:行者123 更新时间:2023-12-04 06:07:25 25 4
gpt4 key购买 nike

在Django中基于类的UpdateView中,我排除了用户字段,因为它是系统内部的,并且我不会要求它。现在,将用户传递到表单的Django正确方法是什么。
(我现在的操作方式是,将用户传递到表单的 init 中,然后覆盖表单的save()方法。但是我敢打赌,这样做有一种正确的方法。诸如隐藏字段或事物之类的东西这种性质。

# models.py
class Entry(models.Model):
user = models.ForeignKey(
User,
related_name="%(class)s",
null=False
)

name = models.CharField(
blank=False,
max_length=58,
)

is_active = models.BooleanField(default=False)

class Meta:
ordering = ['name',]

def __unicode__(self):
return u'%s' % self.name

# forms.py
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
exclude = ('user',)

# views.py
class UpdateEntry(UpdateView):
model = Entry
form_class = EntryForm
template_name = "entry/entry_update.html"
success_url = reverse_lazy('entry_update')

@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(UpdateEntry, self).dispatch(*args, **kwargs)

# urls.py
url(r'^entry/edit/(?P<pk>\d+)/$',
UpdateEntry.as_view(),
name='entry_update'
),

最佳答案

像传递隐藏字段一样乱搞是没有意义的,因为这与客户端确实无关。这种经典的“与登录用户相关联”的问题肯定应该在服务器端处理。

我将这种行为放在form_valid方法中。

class MyUpdateView(UpdateView):
def form_valid(self, form):
instance = form.save(commit=False)
instance.user = self.request.user
super(MyUpdateView, self).save(form)

# the default implementation of form_valid is...
# def form_valid(self, form):
# self.object = form.save()
# return HttpResponseRedirect(self.get_success_url())

关于django基于类的 View -UpdateView-在处理表单时如何访问请求用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com