标签: django-class-based-views

何时重写 Django CBV 中的 get 方法?

我一直在学习 Django,我的困惑来源之一是基于类的视图以及何时重写 get 方法。我查看了文档,它解释了 get 的作用,但没有解释何时应该覆盖 get。

我最初是这样创建视图的:

class ExampleView(generic.ListView):
    template_name = 'ppm/ppm.html'
    paginate_by = 5

    def get(self, request):
        profiles_set = EmployeeProfile.objects.all()
        context = {
            'profiles_set': profiles_set,
            'title': 'Employee Profiles'
        }
        return render(request, self.template_name, context)
Run Code Online (Sandbox Code Playgroud)

但最近有人告诉我,我的代码对于默认实现来说足够简单,而我所需要的就是这样:

class ExampleView(generic.ListView):
    model = EmployeeProfile
    template_name = 'ppm/ppm.html'
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:在什么场景/情况下我应该重写 get 方法?

python django django-class-based-views

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

在基于 django 类的通用视图 CreateView 中设置表单字段

我正在使用 djangoCreateView将图像添加到书中。我将书的 id 作为 url 中的参数传递给基于类的视图。诸如book和 之类的表单字段language不会呈现在模板上,而是借助书籍 ID 来获取。

# views.py
class PictureCreateView(CreateView):
    model = Upload
    fields = "__all__"
    book_id = None

    def get_initial(self):
        initial = super(PictureCreateView, self).get_initial()
        initial = initial.copy()
        self.book_id = self.kwargs['book_id']
        book = Book.objects.get(id=self.book_id)
        initial['book'] = book
        initial['language'] = language
        initial['uploader'] = self.request.user
        return initial

    # set book_id so it used in the template
    def get_context_data(self, **kwargs):
        context = super(PictureCreateView, self).get_context_data(**kwargs)
        context['book_id'] = self.book_id
        return context

    def form_valid(self, form, **kwargs):
        print('Form …
Run Code Online (Sandbox Code Playgroud)

django django-views django-class-based-views

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

具有自定义字段表单的 ModelForm 的 UpdateView

我有两个型号

Model A:
   fieldA1
   fieldA2

Model B:
   fieldA = ForeignKey(A)
   fieldB1
   fieldB2

Run Code Online (Sandbox Code Playgroud)

我需要创建 ModelFormB 但我还需要通过表单向模型 B 插入值。所以我创造

ModelForm B:
  fielda1 = form.CharField()
  fielda2 = form.CharField()
  class Meta:
     model = ModelB
     field = [fielda1, fielda2, fieldb1, fieldb2]
Run Code Online (Sandbox Code Playgroud)

Mu更新查看代码:

class ModelBUpdateView(LoginRequiredMixin, UpdateView):
    model = ModelB
    form_class = ModelFormB
    template_name = "....."
    success_url = reverse_lazy('...')
Run Code Online (Sandbox Code Playgroud)

问题是,在模板中我只能看到 ModelB(fieldb1,fieldb2) 实例初始值,但 fielda1 和 fielda2 完全空白。

updateview期间如何将值发送到fielda1和fielda2?

django modelform django-class-based-views

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

DetailView 缺少查询集错误。它不应该与主键一起使用吗?

对于这个超级好的 django 东西来说还是很新的。尽我最大努力...

在浏览器中尝试http://127.0.0.1:8000/angebot/1/应该会向我显示模型 Testkunde 中主键 1 的查询集

我需要在详细视图中定义查询集吗?通常使用 model = Testkunde 应该这样做?

非常感谢任何帮助!提前致谢!

视图.py

class TestkundeDetailView(DetailView):
    model = Testkunde
    template_name = 'angebot/detail.html'
    context_object_name = 'testkunde_list'
Run Code Online (Sandbox Code Playgroud)

urls.py

urlpatterns = [
    #path('', angebot_views.testkunde_list, name='testkunde_list'),
    path('', angebot_views.TestkundeListView.as_view(), name='angebot-list'),
    path('<int:pk>/', angebot_views.DetailView.as_view(), name='angebot-detail'),
]
Run Code Online (Sandbox Code Playgroud)

模型.py

class Testkunde(models.Model):
    auswahl = (
        ('Ausw1', 'Ausw2'),
        ('Ausw2', 'ausw2'),
        ('Ausw3', 'ausw3'),
    )

    vname = models.CharField(max_length=250,default='vname')
    nname = models.TextField(default='default')
    tel = models.CharField(max_length=250,default='0664')
    ausw = models.CharField(max_length=10,choices=auswahl,default="Ausw1")
    datum = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.vname

    def get_absolute_url(self):
        return reverse('angebot:testkunde_list',)
Run Code Online (Sandbox Code Playgroud)

错误:

/angebot/1/ …

python django web-applications django-class-based-views detailview

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