我正在使用基于类的通用视图,任何人都可以建议我如何设置初始值以更新表单?
我尝试使用get_initial()方法,但没有取得任何成功.以下是我试过的代码
class IncidentUpdateView(UpdateView):
form_class = IncidentForm
form_class.initial = {"badge_number": '88888'}
model = Incident
template_name = 'hse/incident/incident_update.html'
def get_initial(self, form_class):
initials = {
"badge_number": '88888'
}
form = form_class(initial=initials)
return form
def get_success_url(self):
return reverse_lazy('hse-incident', args=[self.object.id])
Run Code Online (Sandbox Code Playgroud) python django django-forms django-views django-class-based-views
我试图实现一个Class Based ListView显示选择的表集.如果第一次请求站点,则应显示数据集.我更喜欢POST提交,但GET也没关系.
这是一个容易处理的问题,function based views但是基于类的视图我很难理解.
我的问题是我得到了各种错误,这是由于我对基于分类的观点的理解有限.我已阅读各种文档,我理解直接查询请求的视图,但只要我想在查询语句中添加一个表单,我就遇到了不同的错误.对于下面的代码,我会收到一个ValueError: Cannot use None as a query value.
根据表单条目(否则选择整个数据库),基于类的ListView的最佳实践工作流程是什么?
这是我的示例代码:
models.py
class Profile(models.Model):
name = models.CharField(_('Name'), max_length=255)
def __unicode__(self):
return '%name' % {'name': self.name}
@staticmethod
def get_queryset(params):
date_created = params.get('date_created')
keyword = params.get('keyword')
qset = Q(pk__gt = 0)
if keyword:
qset &= Q(title__icontains = keyword)
if date_created:
qset &= Q(date_created__gte = date_created)
return qset
Run Code Online (Sandbox Code Playgroud)
forms.py
class ProfileSearchForm(forms.Form):
name = forms.CharField(required=False)
Run Code Online (Sandbox Code Playgroud)
views.py
class ProfileList(ListView):
model = Profile
form_class = …Run Code Online (Sandbox Code Playgroud) forms django listview django-class-based-views class-based-views
我是django的新手.现在我正在学习使用基于类的通用视图.有人可以解释一下context_object_name属性的目的和用途吗?
我试图调用基于类的视图,我能够做到这一点,但由于某种原因,我没有得到我正在调用的新类的上下文
class ShowAppsView(LoginRequiredMixin, CurrentUserIdMixin, TemplateView):
template_name = "accounts/thing.html"
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super(ShowAppsView, self).dispatch(*args, **kwargs)
def get(self, request, username, **kwargs):
u = get_object_or_404(User, pk=self.current_user_id(request))
if u.username == username:
cities_list=City.objects.filter(user_id__exact=self.current_user_id(request)).order_by('-kms')
allcategories = Category.objects.all()
allcities = City.objects.all()
rating_list = Rating.objects.filter(user=u)
totalMiles = 0
for city in cities_list:
totalMiles = totalMiles + city.kms
return self.render_to_response({'totalMiles': totalMiles , 'cities_list':cities_list,'rating_list':rating_list,'allcities' : allcities, 'allcategories':allcategories})
class ManageAppView(LoginRequiredMixin, CheckTokenMixin, CurrentUserIdMixin,TemplateView):
template_name = "accounts/thing.html"
def compute_context(self, request, username):
#some logic here
if u.username == username:
if request.GET.get('action') …Run Code Online (Sandbox Code Playgroud) 我有一个视图,我需要显示有关某个模型实例的信息,因此我使用了DetailView.我还需要相同的视图来处理常规表单(不是模型表单),同时显示表单GET并验证它POST.要做到这一点,我试图使用一个FormView但是两个视图clases的组合不起作用:
class FooView(FormView, DetailView):
# configs here
Run Code Online (Sandbox Code Playgroud)
在GET(为了简单的问题我将只显示问题,GET因为POST有一个不同的问题),它不起作用,因为表单永远不会被添加到上下文.原因与该类的方法解析顺序有关:
>>> inspect.getmro(FooView)
(FooView,
django.views.generic.edit.FormView,
django.views.generic.detail.DetailView,
django.views.generic.detail.SingleObjectTemplateResponseMixin,
django.views.generic.base.TemplateResponseMixin,
django.views.generic.edit.BaseFormView,
django.views.generic.edit.FormMixin,
django.views.generic.detail.BaseDetailView,
django.views.generic.detail.SingleObjectMixin,
django.views.generic.base.ContextMixin,
django.views.generic.edit.ProcessFormView,
django.views.generic.base.View,
object)
Run Code Online (Sandbox Code Playgroud)
在请求中,Django必须获取表单并将其添加到上下文中.这发生在ProcessFormView.get:
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates a blank version of the form.
"""
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
Run Code Online (Sandbox Code Playgroud)
然而,get定义了MRO的第一个类是BaseDetailView:
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context …Run Code Online (Sandbox Code Playgroud) 有没有什么好的教程可以学习如何在Django中使用基于类的泛型视图?我认为文档不是很好,当我尝试不使用ListView,DetailView,CreateView,UpdateView和其他常见的东西时,我有点迷失.我已经阅读了Django文档,Django Book和很多谷歌搜索.但我觉得我仍然不满意我的知识.谢谢
我正在尝试创建一个对话框,该对话框使用jquery的.load()函数以渲染的django形式进行slurp..load函数传递给"alert"对象的pk.在类函数中也可以使用self.request.user这样的东西,所以我可以预先填充这些字段,如下面的消息模型(models.py)中所示:
class Message(models.Model):
user = models.ForeignKey(User)
alert = models.ForeignKey(Alert)
date = models.DateTimeField()
message = models.TextField()
Run Code Online (Sandbox Code Playgroud)
子类化django的CreateView使得使用ModelForm(views.py)的实例生成上下文非常容易:
class MessageDialogView(CreateView):
""" show html form fragment """
model = Message
template_name = "message.html"
def get_initial(self):
super(MessageDialogView, self).get_initial()
alert = Alert.objects.get(pk=self.request.POST.get("alert_id"))
user = self.request.user
self.initial = {"alert":alert.id, "user":user.id, "message":"test"}
return self.initial
def post(self, request, *args, **kwargs):
super(MessageDialogView, self).post(request, *args, **kwargs)
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(form=form)
return self.render_to_response(context)
Run Code Online (Sandbox Code Playgroud)
这里的问题是self.initial没有使用表单呈现.我已经确保表单确实在调用get_initial,并且表单实例具有正确的初始数据post,但是当表单在模板中呈现时,message.html它不会像我期望的那样获取任何初始数据.是否有一个特殊的技巧让这个工作?我已经搜索了文档(似乎缺乏基于泛型的类视图的示例)和源代码,但我无法看到我所缺少的内容.
如果我有一个基于类的视图,像这样,
class SomeView (View):
response_template='some_template.html'
var1 = 0
var2 = 1
def get(self, request, *args, **kwargs):
return render_to_response(self.response_template, locals(), context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我的问题是,在模板中some_template.html,我如何访问var1和var2?据我所知,locals()这种方法只是将所有局部变量转储到模板中,到目前为止,该模板运行良好.但是这些其他变量在技术上并不是"本地的",它们是一个类的一部分,所以如何将它们传递给它们?
谢谢!
django class django-templates django-views django-class-based-views
我有一个DeleteView:
class LectureDelete(SuccessMessageMixin, DeleteView):
model = Lecture
success_message = "Die Veranstaltung wurde gelöscht"
success_url = '/'
def get_object(self):
qs = super(LectureDelete, self).get_object()
if self.request.user.has_perm('edit_lecture', qs):
return qs
else:
raise exceptions.PermissionDenied
Run Code Online (Sandbox Code Playgroud)
在我的success_url链接的模板中,我有以下代码,它可以与其他消息一起使用:
{% if messages %}
{% for message in messages %}
<p class="alert alert-dismissable {% if message.tags %}alert-{{ message.tags }}"{% endif %}>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{ message }}
</p>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是没有显示该消息.我错过了什么吗?我在做什么?谢谢!
如何get_context_data从CVB DetailView中获取'pk'或'id' ?
class MyDetail(DetailView):
model = Book
template_name = 'book.html'
def get_context_data(self, **kwargs):
context = super(MyDetail, self).get_context_data(**kwargs)
context['something'] = Book.objects.filter(pk=pk)
return context
Run Code Online (Sandbox Code Playgroud)
网址:
url(r'^book/(?P<pk>\d+)/$', MyDetail.as_view(), name='book'),
Run Code Online (Sandbox Code Playgroud)