使用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) 我在我的模型中使用了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
我正在使用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样板.这里的任何帮助都非常感谢,因为文档显示了模板视图和列表视图的示例,但我发现基于模型的通用视图很少.我在文档中遗漏了一个例子吗?
我有一个代表日历中条目的模型.拥有该条目的另一个对象(不是用户)有一个外键.我想要做的只是创建条目,确保正确设置条目的外键,然后将用户返回到相应的日历页面.
但是,我不知道基于类的通用视图如何接收其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) 作为一个非专业的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的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) 假设我们有一个名为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将能够处理预先填充的字段上的数据.
具体来说,我想要以下行为:
/closet/outfit/new我希望得到一个标准ModelForm的Outfit一切空白,一切编辑模式./closet/outfit/new/?shirt=1我想看到我在案例1)中看到的所有字段,但我希望衬衫字段预先填充pk = 1的衬衫.此外,我希望衬衫字段显示为不可编辑.如果表单已提交且被视为无效,则在重新显示表单时,我希望衬衫字段继续不可编辑./closet/outfit/new/?shirt=1&trouser=2我想看到我在案例1)中看到的所有领域,但现在衬衫和裤子领域都应该是预先设定的并且是不可编辑的.(即只有footwear字段应该是可编辑的.)一般来说,这可能吗?即,查询字符串可以这种方式修改显示的表单的结构吗?我希望尽可能以DRYest方式实现这一目标.我的直觉告诉我这应该是基于类的观点可行,也许会涉及model_form_factory但我无法在我的脑海中找到逻辑.特别是,我不确定是否有可能让基于类的视图在构造时访问request.REQUEST(即request.POST或request.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
我目前正在使用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) 我有一个基于类的 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
我的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)