标签: django-class-based-views

在基于类的通用视图中将初始值设置为modelform

我正在使用基于类的通用视图,任何人都可以建议我如何设置初始值以更新表单?

我尝试使用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

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

Django:基于类的ListView中的搜索表单

我试图实现一个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

25
推荐指数
3
解决办法
3万
查看次数

django视图中的context_object_name是什么?

我是django的新手.现在我正在学习使用基于类的通用视图.有人可以解释一下context_object_name属性的目的和用途吗?

django-class-based-views

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

Django从另一个基于类的视图调用基于类的视图

我试图调用基于类的视图,我能够做到这一点,但由于某种原因,我没有得到我正在调用的新类的上下文

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)

python django django-class-based-views

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

Django结合了DetailView和FormView

我有一个视图,我需要显示有关某个模型实例的信息,因此我使用了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 django-class-based-views

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

Django的.基于类的视图的一个很好的教程

有没有什么好的教程可以学习如何在Django中使用基于类的泛型视图?我认为文档不是很好,当我尝试不使用ListView,DetailView,CreateView,UpdateView和其他常见的东西时,我有点迷失.我已经阅读了Django文档,Django Book和很多谷歌搜索.但我觉得我仍然不满意我的知识.谢谢

django django-class-based-views

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

如何使用初始数据子类化django的通用CreateView?

我正在尝试创建一个对话框,该对话框使用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它不会像我期望的那样获取任何初始数据.是否有一个特殊的技巧让这个工作?我已经搜索了文档(似乎缺乏基于泛型的类视图的示例)和源代码,但我无法看到我所缺少的内容.

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

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

Django将变量从基于类的视图传递给模板

如果我有一个基于类的视图,像这样,

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,我如何访问var1var2?据我所知,locals()这种方法只是将所有局部变量转储到模板中,到目前为止,该模板运行良好.但是这些其他变量在技术上并不是"本地的",它们是一个类的一部分,所以如何将它们传递给它们?

谢谢!

django class django-templates django-views django-class-based-views

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

DeleteView中的success_message未显示

我有一个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">&times;</button>
            {{ message }}
        </p>
        {% endfor %}
    {% endif %}
Run Code Online (Sandbox Code Playgroud)

但是没有显示该消息.我错过了什么吗?我在做什么?谢谢!

django django-class-based-views

19
推荐指数
3
解决办法
5318
查看次数

如何在CVB的`get_context_data`中获得'pk'或'id'?

如何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)

django django-class-based-views

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