标签: django-class-based-views

Django:使用post()方法的ListView?

我试图在基于Django类的视图中处理两个表单.该站点包含一个名为form(基于GET)的表单,用于缩小ListView和第二个表单status_form(基于POST)的列表结果.

两个表单都是必需的,因为ListView返回一个项列表.Form让用户限制选择并status_forms让用户通过模态表单标记不正确的项目(因此它需要在同一模板中).

我的麻烦是,ListView方法没有post,但是FormView.我的类List继承自这两个类,但是当我执行该类时,我收到错误消息:

属性错误:'List'对象没有属性'status_form'

我该如何更改我的实现以允许通过post method?处理第二个表单?

class List(PaginationMixin, ListView, FormMixin):
    model = ListModel
    context_object_name = 'list_objects'
    template_name = 'pages/list.html'
    paginate_by = 10 #how may items per page

    def get(self, request, *args, **kwargs):
        self.form = ListSearchForm(self.request.GET or None,)
        return super(List, self).get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.status_form = StatusForm(self.request.POST or None)
        if self.status_form.is_valid():
            ...
        else:
            return super(List, …
Run Code Online (Sandbox Code Playgroud)

python django formview django-class-based-views class-based-views

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

通过基于Django类的视图发送文件

我们对大多数项目使用基于类的视图.当我们尝试创建一个CSV Mixin时,我们遇到了一个问题,它允许用户将来自几乎任何页面的信息导出为CSV文件.我们的特殊问题涉及CSV文件,但我相信我的问题是通用的,足以与任何文件类型相关.

我们遇到的问题是视图的响应是试图转到模板(比如说from django.views.generic import TemplateView).我们在urls.py文件中指定模板.

url(r'^$', MyClassBasedView.as_view(template_name='my_template.html'))
Run Code Online (Sandbox Code Playgroud)

如何强制响应绕过模板并返回标准HttpResponse?我猜你需要覆盖一个方法,但我不确定是哪一个.

有什么建议?

编辑1:看来我不清楚我们要做什么.我已经渲染了一个页面(通过基于类的视图),用户将看到信息报告.我需要输入一个"导出到CSV"按钮供用户按,它将在页面上导出信息并将CSV下载到他们的机器上.

不能将视图重写为基于方法的视图.我们处理几乎所有基于类的视图类型(DetailView,ListView,TemplateView,View,RedirectView等)

python django download django-class-based-views

6
推荐指数
1
解决办法
5651
查看次数

为什么在使用form_class而不是CreateView时,UpdateView需要定义model/queryset/get_queryset?

奇迹般有效:

MyCreateView(CreateView):
    template_name = "my_template_name"
    form_class = MyModelForm
    success_url = "/success/"
Run Code Online (Sandbox Code Playgroud)

但以下不是:

MyUpdateView(UpdateView):
    template_name = "my_template_name"
    form_class = MyModelForm
    success_url = "/success/"
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

MyUpdateView is missing a queryset. Define MyUpdateView.model, MyUpdateView.queryset, or override MyUpdateView.get_queryset().
Run Code Online (Sandbox Code Playgroud)

为什么UpdateView需要model,queryset或者get_queryset定义为不会导致错误而CreateView不是?它不应该能够从ModelForm中使用的模型中自动导出它吗?

django django-class-based-views

6
推荐指数
1
解决办法
4925
查看次数

基于Django类的视图 - 具有两个模型形式的UpdateView - 一个提交

我有一个包含用户列表的页面,并希望能够单击链接以更新其个人资料.点击"更新"后,我应该可以使用一个提交按钮在一个页面中编辑用户名,名字,...电子邮件,电话号码,部门等.我通过使用两个表单完成了这个,一个用于User,另一个用于额外信息.ListView,DeleteView和CreateView与这两种形式完美配合,但不适用于UpdateView.我无法使用初始数据实例化这两个表单.

问题是:如何用数据实例化两个表单?覆盖self.object?get_form_kwargs?什么是最优雅的解决方案?

UpdateView类如下所示.我不是在寻找'复制 - 粘贴'解决方案,但可能会指出我正确的方向.

谢谢.

保罗

电话号码,部门在名为Employee的模型中定义.

class Employee(models.Model):
    user = models.OneToOneField(User)
    phone_number = models.CharField(max_length=13, null=True)
    department = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

模板是:

{% extends "baseadmin.html" %}
{% load crispy_forms_tags %}

{% block content %}
<h4>Edit a user</h4>
<form action="" method="post" class="form-horizontal">
    <legend>Edit a user</legend>
    {% crispy form %}
    {% crispy form2 %}
    <div class="form-actions">
        <input type="submit" class="btn btn-primary" value="Save">
            <a href="{% url 'client_list' %}" class="btn">Cancel</a>
    </div>
</form>
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

视图类是:

class ClientUpdateView(UpdateView):
    model = User
    form_class = ClientsUserForm
    second_form_class …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
1
解决办法
8025
查看次数

Django Generic Relations错误:"无法将关键字'content_object'解析为字段"

我正在使用Django的通用关系来定义问答模型的投票模型.

这是我的投票模型:

models.py

class Vote(models.Model):
    user_voted = models.ForeignKey(MyUser)
    is_upvote = models.BooleanField(default=True)

    # Generic foreign key
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    class Meta:
        unique_together = ('content_type', 'user_voted')
Run Code Online (Sandbox Code Playgroud)



views.py

        user_voted = MyUser.objects.get(id=request.user.id)
        object_type = request.POST.get('object_type')

        object = None;
        if object_type == 'question':
            object = get_object_or_404(Question, id=self.kwargs['pk'])
        elif object_type == 'answer':
            object = get_object_or_404(Answer, id=self.kwargs['pk'])

        # THIS LAST LINE GIVES ME THE ERROR
        vote, created = Vote.objects.get_or_create(user_voted=user_voted, content_object=object)
Run Code Online (Sandbox Code Playgroud)



然后我收到这个错误:

FieldError at /1/ 
Cannot resolve keyword 'content_object' into field. …
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views

6
推荐指数
1
解决办法
2456
查看次数

如何使用基于类的视图和django-filter的简单示例?

文档中的示例https://django-filter.readthedocs.org/en/latest/usage.html,我认为是基于函数的视图.我目前正在研究如何使用基于类的视图执行此操作.

def product_list(request):
f = ProductFilter(request.GET, queryset=Product.objects.all())
return render_to_response('my_app/template.html', {'filter': f})
Run Code Online (Sandbox Code Playgroud)

django-views django-filter django-class-based-views

6
推荐指数
1
解决办法
2745
查看次数

如何使用当前登录用户作为 Django DetailView 的 PK?

在定义 URL 模式时,我应该使用正则表达式从 URL 获取 PK。

如果我想要一个没有PK的URL,如果没有提供,它将使用当前登录的用户怎么办?例子:

  • 访问/user将获得当前登录用户的 DetailView
  • /user/edit 将显示当前登录用户的 UpdateView

我尝试pk=Detail.as_view()调用中对 the进行硬编码,但它报告无效的关键字。

如何在 URL conf 中指定?

我的示例代码显示访问/userURL时需要 PK 错误:

urlpatterns = patterns('',
    url(r'user/$', 
        DetailView.as_view(
            model=Account,
            template_name='user/detail.html')),
)`
Run Code Online (Sandbox Code Playgroud)

python django django-urls django-class-based-views

5
推荐指数
1
解决办法
3777
查看次数

URL中的Django Rest必需参数

我正在使用 Django 休息框架。这是我的代码:

网址.py:

urlpatterns = [
    url(r'^users/show', UserShow.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

视图.py:

class UserShow(ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get_queryset(self):
        queryset = User.objects.all()
        username = self.request.query_params.get('username', None)
        user_id = self.request.query_params.get('user_id', None)
        if username is not None:
            queryset = queryset.filter(username=username)
        if user_id is not None:
            queryset = queryset.filter(pk=user_id)
        return queryset
Run Code Online (Sandbox Code Playgroud)

我想从这样的 url 获取值: /users/show?user_id=1/users/show?username=mike.

无论是一个user_idusername必须需要的参数。如何在基于类的视图中控制它?

使用我的代码,如果我发送带有错误参数名称的请求/users/show?user111name=mike或简单/users/show的视图当然会响应我queryset = User.objects.all()并列出所有用户。我不需要那个。如果所需参数是None404 响应,我需要。

我可以通过基于函数的视图获得所需的结果:

@api_view(['GET'])
def …
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views django-rest-framework

5
推荐指数
1
解决办法
7303
查看次数

在使用 Django 的 CreateView 时,如何在保存之前修改表单数据?

我正在使用CreateViewDjango 并且我试图找出如何修改在保存之前发送的任何文本。例如,现在我只想在保存之前将所有文本小写。

我知道我需要使用,form_valid()但我似乎无法正确使用。

表格.py

class ConfigForm(forms.ModelForm):
    class Meta:
        model  = Config
        fields = ["heading", "name", "data", "rating"]
Run Code Online (Sandbox Code Playgroud)

视图.py

def form_valid(self, form):
    super().form_valid(form)
    form.fields["heading"].lower()
    form.fields["name"].lower()
    form.fields["data"].lower()
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views

5
推荐指数
1
解决办法
3959
查看次数

使用 UserPassesTestMixin(基于类的视图)和重定向

我正在尝试使用基于类的视图,而我最终得到的是默认的 403 Forbidden 页面..mixin 类的顺序是否正确?代码是否甚至在 get/post 中被使用 - 还是所有内容都被绕过并发生默认的 403 重定向?

到目前为止看到的所有工作示例,仅指向基于函数的视图中的装饰器 @login_required 并使用请求对象重定向到登录页面。该文件提供了一些技巧,但我不能得到它与下面的代码工作..把错误堆栈为好。

查看

 "GET / HTTP/1.1" 200 2580
Forbidden (Permission denied): /app/custom-view
Traceback (most recent call last):
  File "C:\Users\me\.envs\project\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\me\.envs\project\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\me\.envs\project\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\me\.envs\project\lib\site-packages\django\views\generic\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\me\.envs\project\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
    return super().dispatch(request, *args, …
Run Code Online (Sandbox Code Playgroud)

django django-views django-authentication django-users django-class-based-views

5
推荐指数
1
解决办法
2321
查看次数