标签: django-class-based-views

Django mixin 可以继承另一个 mixin 吗?

我很确定这个问题的答案显然是“否”,因为 Django mixins 应该

继承“对象”,但我找不到解决我的问题的替代方案:(

为了让问题尽可能简单,,,

视图.py

class JSONResponseMixin(object):
    def render_to_response(self, context):
        "Returns a JSON response containing 'context' as payload"
        return self.get_json_response(self.convert_context_to_json(context))

    def get_json_response(self, content, **httpresponse_kwargs):
        "Construct an `HttpResponse` object."
        return http.HttpResponse(content,
                                 content_type='application/json',
                                 **httpresponse_kwargs)

    def convert_context_to_json(self, context):
        "Convert the context dictionary into a JSON object"
        # Note: This is *EXTREMELY* naive; in reality, you'll need
        # to do much more complex handling to ensure that arbitrary
        # objects -- such as Django model instances or querysets
        # -- can be …
Run Code Online (Sandbox Code Playgroud)

django ajax json django-class-based-views

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

Django UpdateView 创建一个新对象而不是更新当前对象

每次我使用 UpdateView 并尝试更改某些属性时,它都会使用新的唯一主键在我的数据库中创建一个新对象。我的模型如下。

class Delivery(models.Model):
    created_date = models.DateTimeField('date created', editable=False)
    modified_date = models.DateTimeField('modified', editable=False)
    user_name = models.ForeignKey(User, null=False)
    stream_name = models.CharField(max_length=50, null=False)
    view_name = models.CharField(max_length=100, null=False, blank=True)
    activity_name = models.CharField(max_length=100, null=False, blank=True)
    jira = models.URLField()
    codereview = models.URLField()
    related_streams = models.CharField(max_length = 100, choices=sorted(streams()))
    description = models.TextField(null=False,blank=True)
    status = models.BooleanField(default=False, blank=False)

    class Meta:
        verbose_name = "Delivery"
        verbose_name_plural = "Deliveries"
        unique_together = (("user_name", "view_name", "activity_name"),)
Run Code Online (Sandbox Code Playgroud)

对于表单,我使用 UpdateView 默认使用的 ModelFactoryForm 来选择使用模型本身的 form_class。

class UpdateEntryView(UpdateView):
    template_name = 'tracker/update.html'
    model = Delivery
    success_url = …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-class-based-views

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

如何在单个 formView 类 Django 中验证多个表单

我有一个formView课程,如下所示:-

查看.py

class ThreadForm(FormView):
        template_name = 'thread.html'
        form_class = ThreadModelForm
        success_url = '/success'

        def form_valid(self, form):
            # This method is called when valid form data has been POSTed.
            # It should return an HttpResponse.
            print form.cleaned_data
            return super(ThreadForm, self).form_valid(form)

        def get_context_data(self, **kwargs):
            context = super(ThreadForm, self).get_context_data(**kwargs)
            context['second_form'] = MessageModelForm
            return context
Run Code Online (Sandbox Code Playgroud)

线程.html

{form.as_p}
{second_form.as_p}
SUBMIT 
Run Code Online (Sandbox Code Playgroud)

在我的模板中thread.html,我有两个模型表单但只有一个提交按钮。问题是我没有从我的数据中获取任何数据second_form,也无法验证second_form。我正在接收来自form但不是来自second_form. 谁能告诉我如何验证second_form数据。谢谢

一种方法是使用,request.post['data']但还有其他方法吗?

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

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

Django:UpdateView - 调度:减少查询数量

我有一个产品模型、公司模型的外键、用户的单键。

我重写调度(方法)来检查用户是否有权编辑对象(产品)。

我正在尝试优化对数据库的查询,因为其中一些是重复的。

def dispatch(self, request, *args, **kwargs):
    obj = self.get_object()
    if obj.company.user != request.user:
        raise PermissionDenied
    else:
        print('ok')
        return super().dispatch(request, *args, *kwargs)
Run Code Online (Sandbox Code Playgroud)

查询产品

obj = self.get_object() 
Run Code Online (Sandbox Code Playgroud)

向公司查询和向用户查询两次

if obj.company.user != request.user:
Run Code Online (Sandbox Code Playgroud)

再次查询产品

 return super().dispatch(request, *args, *kwargs)
Run Code Online (Sandbox Code Playgroud)

如何优化和删除重复查询?

django django-orm django-class-based-views

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

如何在模板 django 中获取类模型的名称

这个问题类似于这个问题(模型名称在 django 模板中的对象)但不一样。

我想知道如何获取 Models 类名(在本例中为“Apple”),或者至少返回一个我可以传递的字符串。

模型.py

   django.db import models
   class Apple(models.Model):
      .....
Run Code Online (Sandbox Code Playgroud)

苹果.html

 <p>Sorry, no {{ ***Model class name**** }}</p>
Run Code Online (Sandbox Code Playgroud)

浏览器中的示例:::“对不起,没有苹果”

编辑

一些额外的条件:

  1. 如果没有从模型创建的对象,因此“对不起,没有苹果”怎么办
  2. 如何灵活地分类,以便您可以对任何种类的水果使用相同的模板。

django django-models django-class-based-views

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

使用基于类的视图预填充 Django 表单

由于我正在学习 Django Class Based View(CBV) 以处理在Function Based View(FBV) 中开发的脚本,我想进行以下过程。

\n\n

我想预填充一个基于self.request.GET.

\n\n

这是我的课:

\n\n
class IdentitySocieteFormView(LoginRequiredMixin, CreateView) :\n\n    form_class = SocieteFormulaire\n    template_name = \'Identity_Societe_Form.html\'\n    model = Societe\n\n    def get_context_data(self, **kwargs) :\n\n        data = super(IdentitySocieteFormView, self).get_context_data(**kwargs)\n\n        if \'recherche\' in self.request.GET :\n\n            query_Responsable = self.request.GET.get(\'Responsable\') \n            Responsable = Individu.objects.filter(NumeroIdentification=query_Responsable)\n\n            data[\'responsable\'] = Responsable\n\n        return data\n\n    def form_valid(self, form) :\n\n        form.instance.Reponsable = responsable\n        form.instance.Utilisateur = self.request.user.last_name + " " + self.request.user.first_name\n\n        return super(IdentitySocieteFormView, self).form_valid(form)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我不确定这一行:form.instance.Reponsable = responsable …

django django-class-based-views

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

verse() 得到了意外的关键字参数 'pk_url_kwarg' - UpdateView

我正在尝试使用 Django 内置类UpdateView来更新图像模型

\n\n

模型是:

\n\n
def get_image_path(instance, filename):\n return \'/\'.join([\'studyoffer_images\', instance.study_offer.slug, filename])\n\n\nclass UploadStudyOffer(models.Model):\n\n    study_offer = models.ForeignKey(StudiesOffert, related_name=\'uploadsstudyoffer\')\n\n    image = models.ImageField(upload_to=get_image_path, verbose_name=\'Seleccionar imagen\')\n    # images folder per object\n\n    featured = models.BooleanField(default=False, verbose_name=\'Destacada\',\n                                   help_text=\'Indica si la imagen aparecera en el carrusel\')\n    thumbnail = models.BooleanField(default=False)\n\n    active = models.BooleanField(default=True, verbose_name=\'Activa\',\n                                 help_text=\'Indica si una imagen de oferta esta habilitada o disponible\')\n\n    objects = UploadStudyOfferManager()\n\n    def __str__(self):\n        return self.study_offer.ad_title\n
Run Code Online (Sandbox Code Playgroud)\n\n

该模型的形式为:

\n\n
class StudyOfferImagesUploadForm(forms.ModelForm):\n    class Meta:\n        model = UploadStudyOffer\n        fields = (\'image\', \'active\', …
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views

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

如果 url 中没有 pk,Django DetailView 显示最后一个

对于基于类的 DetailView,有没有一种方法可以在调用 url 时说“如果未指定 pk”,只需用作MyModel.object.last()对象引用?

url(r'^(?:(?P<pk>\d+)/)?detail/$', views.MyDetailView.as_view()),

class MyDetailView(DetailView):
    model = MyModel
    if self.kwargs['pk'] == False:
       self.object = MyModel.object.last()
Run Code Online (Sandbox Code Playgroud)

我正在运行 Django 1.11

python django django-class-based-views

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

如何在基于类的视图中使用烧瓶路线?

Django 风格的基于类的视图酷而强大的功能。但是 Flask 风格的路由器更适合自由风格的 app 结构。我怎么能做这样的事情:

@app.route("/")
class MyView(MethodView):
    def get(self):
        return "Hello word"
Run Code Online (Sandbox Code Playgroud)

python routing flask django-class-based-views

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

如何在 Django 中使用基于类的视图创建注册视图?

当我开始使用 Django 时,我使用 FBV(基于函数的视图)来处理几乎所有事情,包括注册新用户。

但是当我深入研究项目时,我意识到基于类的视图通常更适合大型项目,因为它们更干净和可维护,但这并不是说 FBV 不是。

无论如何,我将整个项目的大部分视图迁移到基于类的视图,除了一个有点令人困惑的 SignUpView。

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

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