如何解决Django Formset:如何获取当前用户? 使用 django-extra-views
我习惯于在 CreateView 中收集当前登录的用户并将其传递给表单,如下所示:
class MakeFantasyTeam(CreateView):
form_class = MakeFantasyTeamForm
[...]
def form_valid(self,form):
form.instance.team_manager = self.request.user
form.save()
return super(MakeFantasyTeam,self).form_valid(form)
但是,当使用 django-extra-views 提供的 InlineFormSetView 时,这似乎不起作用。我收到错误 NOT NULL 约束失败:锦标赛_invite.invited_by_id 并且我不知道如何将 user.id 传递给表单。
我的观点:
class InvitePlayersView(InlineFormSetView):
template_name = 'invite_players.html'
model = Tournament
inline_model = Invite
form_class = InvitePlayerForm
pk_url_kwarg = 'tourney_id'
factory_kwargs = {'can_delete': False,'extra': 1}
def formset_valid(self,formset):
tourney_id = self.kwargs['tourney_id']
formset.instance.invited_for = Tournament.objects.filter(id=tourney_id).get()
formset.instance.invited_by = self.request.user
formset.save()
return super(InvitePlayersView,self).formset_valid(formset)
def get_success_url(self):
return reverse('make_team',kwargs={'tourney_id': self.object.invited_for.id})
我的模型:
class Invite(models.Model):
name = models.CharField(max_length=200,blank=True,null=True)
email = models.CharField(max_length=320,null=False,blank=False,validators=[EmailValidator],)
invited_by = models.ForeignKey(get_user_model(),on_delete=models.DO_NOTHING)
invited_for = models.ForeignKey(Tournament,on_delete=models.DO_NOTHING)
created_dt = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.email
def get_absolute_url(self):
return reverse('home')
我的表单:
class InvitePlayerForm(forms.ModelForm):
class Meta:
model = Invite
fields = ('name','email',)
非常感谢任何提示或提示!
谢谢,
乔恩
编辑:只是为了澄清我在这里要做的事情;我希望用户提交表单集。该表单集的数据应存储在模型中,提交用户的用户 ID 也应存储在模型中。不过,我似乎无法传递用户 ID。
解决方法
我不确定您到底想在这里做什么,据我了解,您想使用当前登录的用户信息。为此,您可以在会话字典中附加用户信息。之后,您也可以在模板或其他视图中使用这些信息。
在认证视图中
def login(request):
#your necessary data
request.session['user_id']=The_user_id
request.session['user_name']=The_userName
访问模板中的数据
{% request.session.user_id %}
{% request.session.user_name %}
访问其他视图中的数据
def myview(request):
user_id= request.session['user_id']
user_name= request.session['user_name']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。