Django 使createview对应的表单仅在用户登录时才可访问

Django 使createview对应的表单仅在用户登录时才可访问,django,django-views,Django,Django Views,我有一个项目的以下模型: #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 ItemCreati

我有一个项目的以下模型:

#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\u required decorator放在form\u有效方法之上,但没有成功


谁能给我一些关于我做错了什么的建议?谢谢

通过一些游戏,我终于通过使用mixin实现了这一点

class AddNewItem(LoginRequiredMixin, CreateView):
        model = Item
        form_class = ItemCreationForm
        login_url = "/signup/"

 ....
比我想象的容易多了