我有一个项目的以下模型:
#models.py
class Item(models.Model):
seller = models.ForeignKey(settings.AUTH_USER_MODEL)
name = models.CharField(max_length=200)
要制作新商品,我的表格位于www.mysite.com/new-item。当前登录的用户将自动设置为项目的卖家,因此不会显示在表单中。
#forms.py
class ItemCreationForm(forms.ModelForm):
class Meta:
model = Item
fields = ['name',]
以下是相应的观点。
#views.py
class AddNewItem(CreateView):
model = Item
form_class = ItemCreationForm
template_name = 'add_listing.html'
success_url = '/listings/'
def form_valid(self, form):
item = form.save(commit=False)
#if not self.request.user.is_anonymous and self.request.user.is_email_verified:
item.seller = self.request.user
#else:
# return redirect('accounts/login/')
item.save()
return super(AddNewListing, self).form_valid(form)
注释掉的线条是我遇到的麻烦。我希望用户只有在登录后才能访问www.mysite.com/new-item。如果他不是,我希望他被重定向到注册页面。现在,无论我是否注册,我都可以访问表单,只有在按下表单上的提交按钮时才会重定向到此页面。我也尝试将@login_required装饰器放在form_valid方法之上,但那并没有用。
有人能就我做错的事情向我提出一些建议吗?谢谢!
答案 0 :(得分:0)
随着一些游戏,我终于通过使用mixin来实现这一点。
class AddNewItem(LoginRequiredMixin, CreateView):
model = Item
form_class = ItemCreationForm
login_url = "/signup/"
....
比我想象的容易得多!