我一直在学习 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 方法?
我正在使用 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) 我有两个型号
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 东西来说还是很新的。尽我最大努力...
在浏览器中尝试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