标签: django-generic-views

Django:如何使用通用CreateView在注册后直接登录用户

使用django generic CreateView我可以创建一个新的用户帐户,但是如何在注册后使用这种技术自动登录该用户?

urls.py

...    
url( r'^signup/$', SignUpView.as_view(), name = 'user_signup' ),
...
Run Code Online (Sandbox Code Playgroud)

views.py

class SignUpView ( CreateView ) :    
    form_class = AccountCreationForm
    template_name = 'accounts/signup.html'
    success_url = reverse_lazy( 'home' )
Run Code Online (Sandbox Code Playgroud)

forms.py

class AccountCreationForm ( forms.ModelForm ) :        
    def __init__( self, *args, **kwargs ) :
        super( AccountCreationForm, self ).__init__( *args, **kwargs )
        for field in self.fields :
           self.fields[field].widget.attrs['class'] = 'form-control'

    password1 = forms.CharField( label = 'Password', widget = forms.PasswordInput )
    password2 = forms.CharField( label = 'Password confirmation', widget = forms.PasswordInput …
Run Code Online (Sandbox Code Playgroud)

python django-authentication django-generic-views

9
推荐指数
1
解决办法
2140
查看次数

如何使用请求数据在基于Django类的通用createview上设置初始数据

我在我的模型中使用了Django的通用createview

from myproject.app.forms import PersonForm
class PersonMixin(object):
    model = Person
    form_class = PersontForm

class PersonCreateView(PersonMixin, CreateView):
    pass
Run Code Online (Sandbox Code Playgroud)

这非常适合用我的自定义表单显示Person的创建视图.但是,我有一个字段,我希望预先填充一个值.我找到了这个答案:在基于类的通用视图中将初始值设置为modelform

但是,我预先填充的值来自request.user的配置文件.如何在PersonCreateView中访问请求并将其传递给表单?

django django-forms django-generic-views django-class-based-views

8
推荐指数
1
解决办法
1万
查看次数

Django Generic View - 访问请求

我正在使用django通用视图,如何在我的模板中访问请求.

网址:

file_objects = {
    'queryset' : File.objects.filter(is_good=True),
}
urlpatterns = patterns('',
    (r'^files/', 'django.views.generic.list_detail.object_list', dict(file_objects, template_name='files.html')),
)
Run Code Online (Sandbox Code Playgroud)

django django-generic-views

7
推荐指数
1
解决办法
5910
查看次数

如何为模型创建基于通用类的创建视图?

我正在尝试做的是用于功能视图的Django样板.这里的任何帮助都非常感谢,因为文档显示了模板视图和列表视图的示例,但我发现基于模型的通用视图很少.我在文档中遗漏了一个例子吗?

我有一个代表日历中条目的模型.拥有该条目的另一个对象(不是用户)有一个外键.我想要做的只是创建条目,确保正确设置条目的外键,然后将用户返回到相应的日历页面.

但是,我不知道基于类的通用视图如何接收其URL参数,我不清楚如何设置success_url以便它重用最初传递给创建URL的id.再次感谢您的帮助.

基本上,我要问的是,基于类的通用视图等效于以下内容:

def create_course_entry(request, class_id):
'''Creates a general calendar entry.'''
if request.method == 'POST':
    form = CourseEntryForm(request.POST)
    if form.is_valid():
        new_entry = form.save(commit=False)
        new_entry.course = Class.objects.get(pk=class_id)
        new_entry.full_clean()
        new_entry.save()
        return HttpResponseRedirect('/class/%s/calendar/' % class_id)
else:
    form = CourseEntryForm()

return render_to_response('classes/course_entry_create.html',
        { 'class_id': class_id, 'form': form, },
        context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

django django-generic-views

7
推荐指数
2
解决办法
1万
查看次数

Django:为基于类的视图扩展get_object

作为一个非专业的Python程序员,我正在寻找有关扩展Django的SingleObjectMixin类的get_object方法的方式的反馈.

对于我的大多数细节视图,使用pk或slugfield进行查找很好 - 但在某些情况下,我需要根据其他(唯一)字段检索对象,例如"username".我将Django的DetailView子类化,并修改了get_object方法,如下所示:

# extend the method of getting single objects, depending on model
def get_object(self, queryset=None):

    if self.model != mySpecialModel:
        # Call the superclass and do business as usual 
        obj = super(ObjectDetail, self).get_object()
        return obj

    else:
        # add specific field lookups for single objects, i.e. mySpecialModel
        if queryset is None:
            queryset = self.get_queryset()

        username = self.kwargs.get('username', None)
        if username is not None:
            queryset = queryset.filter(user__username=username)
        # If no username defined, it's an error.
        else:
            raise AttributeError(u"This generic detail …
Run Code Online (Sandbox Code Playgroud)

django subclassing django-generic-views

7
推荐指数
1
解决办法
6597
查看次数

Django - CreateView - 如何声明变量并在模板中使用它

如何在Django的Createview中声明变量,以便从模板中使用它?例如,我想在模板中使用{{place_slug}}.我从urls.py传递了这个,如下所示:

urls.py:

urlpatterns = patterns('',
    (r'^new/(?P<place_slug>[\w\-\_]+)/?$', PictureCreateView.as_view(), {}, 'upload-new'),
)
Run Code Online (Sandbox Code Playgroud)

views.py:

class PictureCreateView(CreateView):
    model = Picture

    def dispatch(self, *args, **kwargs):
        self.place = get_object_or_404(Place, slug=kwargs['place_slug'])
        return super(PictureCreateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        more code here
Run Code Online (Sandbox Code Playgroud)

django django-templates django-forms django-generic-views

7
推荐指数
1
解决办法
4788
查看次数

Django:具有查询字符串指定的预填充和不可编辑字段的CreateView

假设我们有一个名为Closet的应用程序,它有一些模型:

# closet.models.py
class  Outfit(models.Model):
    shirt   = models.ForeignKey(Shirt)
    pants   = models.ForeignKey(Trouser)

class Shirt(models.Model):
    desc    = models.TextField()

class Trouser(models.Model):
    desc    = models.TextField()

class Footwear(models.Model):
    desc    = models.TextField
Run Code Online (Sandbox Code Playgroud)

使用通用详细信息视图,可以轻松地将URL配置为以下每个的详细信息:

#urls.py
urlpatterns = patterns('',
    url(r'^closet/outfit/(?P<pk>\d+)$',     DetailView(model=Outfit),       name='outfit_detail'),
    url(r'^closet/shirt/(?P<pk>\d+)$',          DetailView(model=Shirt),        name='shirt_detail'),
    url(r'^closet/trouser/(?P<pk>\d+)$',        DetailView(model=Trouser),      name='trouser_detail'),
    url(r'^closet/footwear/(?P<pk>\d+)$',       DetailView(model=Footwear),     name='footwear_detail'),
)   
Run Code Online (Sandbox Code Playgroud)

我接下来要做的是定义将创建每种类型的新对象的视图.我想这样做的扩展版本CreateView将能够处理预先填充的字段上的数据.

具体来说,我想要以下行为:

  1. 如果我访问/closet/outfit/new我希望得到一个标准ModelFormOutfit一切空白,一切编辑模式.
  2. 如果我访问/closet/outfit/new/?shirt=1我想看到我在案例1)中看到的所有字段,但我希望衬衫字段预先填充pk = 1的衬衫.此外,我希望衬衫字段显示为不可编辑.如果表单已提交且被视为无效,则在重新显示表单时,我希望衬衫字段继续不可编辑.
  3. 如果我访问/closet/outfit/new/?shirt=1&trouser=2我想看到我在案例1)中看到的所有领域,但现在衬衫和裤子领域都应该是预先设定的并且是不可编辑的.(即只有footwear字段应该是可编辑的.)

一般来说,这可能吗?即,查询字符串可以这种方式修改显示的表单的结构吗?我希望尽可能以DRYest方式实现这一目标.我的直觉告诉我这应该是基于类的观点可行,也许会涉及model_form_factory但我无法在我的脑海中找到逻辑.特别是,我不确定是否有可能让基于类的视图在构造时访问request.REQUEST(即request.POSTrequest.GET参数)ModelForm.

也许只有当我为锁定的字段使用不同的查询字符串关键字时才可能.也许URL需要是:/closet/outfit/new/?lock_shirt=1/closet/outfit/new?lock_shirt=1&lock_trouser=2 …

django django-forms django-generic-views django-class-based-views

7
推荐指数
1
解决办法
2076
查看次数

未调用CreateView中的Django form_valid()和form_invalid()

我目前正在使用django的CreateView将数据发布到数据库.不幸的是,我从不调用我想保存并执行自定义逻辑的方法form_valid().我读到另一个堆栈溢出响应,form_invalid()可能会发现问题,但我无法调用该方法.似乎调用的唯一方法是get(),我将其覆盖并放入一个print语句.我做错了什么?

view.py中的类声明

class TeamCreate(CreateView): # Manipulate and use this Method instead of create_team
    model = Team
    # form_class = create_team_form
    fields = ['team_name', 'sport', 'sport_season']
    success_url = '/'

    def get(self, request, *args, **kwargs):
        self.user = request.user
        print 'happening1'
        return super(TeamCreate, self).get(request, *args, **kwargs)


    def form_valid(self, form):
        print 'happening2'
        # form.instance.save()
        # self.user.teams.add(form.instance)
        form.save()
        return super(form_valid, self).form_valid(form)

    def form_invalid(self, form):
        print "form is invalid"
        return http.HttpResponse("form is invalid.. this is just an HttpResponse object")
Run Code Online (Sandbox Code Playgroud)

相关的模板代码

{% block content %}
<form action="" …
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-generic-views

7
推荐指数
2
解决办法
2万
查看次数

django 在基于类的 ListView 中按用户 id 过滤

我有一个基于类的 ListView,我想通过登录的 user_id 过滤对象,因为项目模型有一个指向 settings.AUTH_USER_MODEL 的外键

class ItemListView(LoginRequiredMixin, StaffRequiredMixin, ListView):
  model = Item
  template_name = "items/list_items.html"
Run Code Online (Sandbox Code Playgroud)

在基于函数的视图中,我可以使用 request.user 但不能在基于通用类的视图中执行此操作。关于如何最好地做到这一点的任何想法?

这是项目模型

class Item(models.Model):
  user = models.ForeignKey(settings.AUTH_USER_MODEL)
  description = models.CharField(max_length=300)
Run Code Online (Sandbox Code Playgroud)

django django-generic-views python-3.x django-class-based-views django-1.8

7
推荐指数
1
解决办法
5860
查看次数

在django rest泛型CreateAPIView中覆盖create方法

我的django应用程序的views.py如下,

class MemberCreate(generics.CreateAPIView):
    queryset = members.objects.all()
    serializer_class = MemberSerializer
    permission_classes = (permissions.IsAdminUser,)

    def create(self, serializer):
        ''' I wanted to do some stuff with serializer.data here '''
        pass 
Run Code Online (Sandbox Code Playgroud)

在上面的内容中如果我覆盖了create函数,则返回失败并出现以下错误,即使我没有做任何事情,只是写入传递它失败了,

AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
Run Code Online (Sandbox Code Playgroud)

python django django-generic-views django-rest-framework

7
推荐指数
2
解决办法
6711
查看次数