我很确定这个问题的答案显然是“否”,因为 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) 每次我使用 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) 我有一个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
我有一个产品模型、公司模型的外键、用户的单键。
我重写调度(方法)来检查用户是否有权编辑对象(产品)。
我正在尝试优化对数据库的查询,因为其中一些是重复的。
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 模板中的对象)但不一样。
我想知道如何获取 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)
浏览器中的示例:::“对不起,没有苹果”
编辑
一些额外的条件:
由于我正在学习 Django Class Based View(CBV) 以处理在Function Based View(FBV) 中开发的脚本,我想进行以下过程。
我想预填充一个基于self.request.GET.
这是我的课:
\n\nclass 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)\nRun Code Online (Sandbox Code Playgroud)\n\n但我不确定这一行:form.instance.Reponsable = responsable …
我正在尝试使用 Django 内置类UpdateView来更新图像模型
模型是:
\n\ndef 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\nRun Code Online (Sandbox Code Playgroud)\n\n该模型的形式为:
\n\nclass StudyOfferImagesUploadForm(forms.ModelForm):\n class Meta:\n model = UploadStudyOffer\n fields = (\'image\', \'active\', …Run Code Online (Sandbox Code Playgroud) 对于基于类的 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
Django 风格的基于类的视图酷而强大的功能。但是 Flask 风格的路由器更适合自由风格的 app 结构。我怎么能做这样的事情:
@app.route("/")
class MyView(MethodView):
def get(self):
return "Hello word"
Run Code Online (Sandbox Code Playgroud) 当我开始使用 Django 时,我使用 FBV(基于函数的视图)来处理几乎所有事情,包括注册新用户。
但是当我深入研究项目时,我意识到基于类的视图通常更适合大型项目,因为它们更干净和可维护,但这并不是说 FBV 不是。
无论如何,我将整个项目的大部分视图迁移到基于类的视图,除了一个有点令人困惑的 SignUpView。
django ×9
python ×4
django-views ×2
ajax ×1
django-forms ×1
django-orm ×1
flask ×1
json ×1
routing ×1