令人印象深刻的是,功能性网站与教程中的通用视图一起快速发展.此外,表单处理的工作流程很好.我使用ModelForm帮助器类从我制作的模型创建一个表单,并很高兴看到这么多的功能汇集在一起.当我使用通用list_detail.object_detail时,我很失望,我可以显示的所有内容都是单独的字段.我知道ModelForm类包含用于呈现的信息,因此我想将ModelForm与通用视图一起使用.
我正在询问stackoverflow以获得一些方向,并欣赏几张海报的答案和评论.我已经想出如何让它工作,但DetailView中有一个错误.该解决方案包括一种解决方法.
要将ModelView与通用视图一起使用,并使所有字段自动呈现以下工作:
创建一个项目,并在其中创建应用程序住院患者.
如果你有
# inpatients/models.py
class Inpatient(models.Model):
last_name = models.CharField(max_length=30)
first_name = models.CharField(max_length=30,blank=True)
address = models.CharField(max_length=50,blank=True)
city = models.CharField(max_length=60,blank=True)
state = models.CharField(max_length=30,blank=True)
DOB = models.DateField(blank=True,null=True)
notes = models.TextField(blank=True)
def __unicode__(self):
return u'%s, %s %s' % (self.last_name, self.first_name, self.DOB)
class InpatientForm(ModelForm):
class Meta:
model = Inpatient
Run Code Online (Sandbox Code Playgroud)
和
# inpatients/views.py
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.views.generic import DetailView
from portal.inpatients.models import *
def formtest(request):
if request.method == 'POST':
form = InpatientForm(request.POST)
if form.is_valid():
form.save()
return …Run Code Online (Sandbox Code Playgroud) 根据这里的文档,我试着让haystack使用基于类的通用视图.我可以从shell中的SearchQuerySet获得结果,因此模型正在编制索引.但我无法让视图在页面上返回结果.
使用通用视图的主要原因是我希望稍后使用更多SQS逻辑进行扩展.
我可能错过了一些明显的东西......
from haystack.query import SearchQuerySet
from haystack.generic_views import SearchView
from .forms import ProviderSearchForm
from .models import Provider
class ProviderSearchView(SearchView):
template_name = 'search/provider_search.html'
form_class = ProviderSearchForm
def get_context_data(self, *args, **kwargs):
""" Extends context to include data for services."""
context = super(ProviderSearchView, self).get_context_data(*args, **kwargs)
context['body_attr'] = 'id="provider-search"'
return context
def get_queryset(self):
queryset = super(ProviderSearchView, self).get_queryset()
return queryset.filter(is_active=True)
Run Code Online (Sandbox Code Playgroud)
from haystack import indexes
from .models import Provider
class ProviderIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='name')
created …Run Code Online (Sandbox Code Playgroud) 我有一个带有通用外键的简单模型:
class Generic(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)
我想过滤此表中具有非null content_object的所有条目,即过滤掉Generic其内容对象不再存在的所有实例:
Generic.objects.filter(~Q(content_object=None))
Run Code Online (Sandbox Code Playgroud)
这不起作用,给出例外:
django.core.exceptions.FieldError:字段'content_object'不生成自动反向关系,因此不能用于反向查询.如果是GenericForeignKey,请考虑添加GenericRelation.
添加GenericRelation到引用的内容类型模型没有区别.
如何实现这一点的任何帮助将不胜感激,非常感谢.
编辑:我意识到我可以级联删除,但在我的情况下这不是一个选项(我希望保留数据).
python django django-queryset django-generic-views django-contenttypes
我正在使用DetailView来查看Project对象,我希望能够访问正在查看的Project对象,以便将其传递给装饰器,如下所示:
class ProjectDetailView(DetailView):
context_object_name = "project"
model = Project
@method_decorator(membership_required(project))
def dispatch(self, *args, **kwargs):
return super(ProjectDetailView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是,将"project"或"object"传递给装饰器会给我一个"对象",而不是Project实例.如何获取Project实例,以便我的装饰器功能可以使用它?
我正在尝试编写一个测试来验证从基于类的通用视图返回的HTML.假设我有这个基于函数的视图,只需渲染一个模板:
# views.py
from django.shortcuts import render
def simple_view(request, template='template.html'):
return render(request, template)
Run Code Online (Sandbox Code Playgroud)
有了它,在测试期间我可以这样做:
# tests.py
from django.http import HttpRequest
from .views import simple_view
request = HttpRequest()
response = simple_view(request)
Run Code Online (Sandbox Code Playgroud)
然后对其进行验证response.现在我想将上面的内容转换为继承自TemplateView的基于类的视图:
# views.py
from django.views.generic import TemplateView
class SimpleView(TemplateView):
template_name = 'template.html'
Run Code Online (Sandbox Code Playgroud)
现在基本相同的测试方法失败了:
# tests.py
from django.http import HttpRequest
from .views import SimpleView
request = HttpRequest()
view_func = SimpleView.as_view()
response = view_func(request).render()
Run Code Online (Sandbox Code Playgroud)
结果是
Traceback (most recent call last):
File "tests.py", line 30, in test_home_page_returns_correct_html
response = view_func(request).render()
File …Run Code Online (Sandbox Code Playgroud) 我创建了一个继承自的类DetailView,并且覆盖了方法get_context_data和post。标题中提到的内容看起来很怪异,因为我可以发邮件给我self.object,get_context_data但不能发邮件,所以我不得不self.get_object()改用。但是我想了解为什么?被self.object删除get_context_data?这样在它之后调用的任何方法都不能使用它或类似的东西吗?
提前致谢
我有 2 个独立的模型,发布和评论。我使用 DetailView 来显示 Post 内容,我想使用 CreateView 在同一页面上显示评论创建表单。最干净的方法是什么?
唯一想到的是使用自定义视图,它既获取对象又处理评论表单,但这看起来太脏了:
def post_detail(request, slug):
post = get_object_or_404(Post, slug=slug)
if request.POST:
form = CommentForm(request.POST)
# do comment form processing here
return render(request, "post/post_detail.html", {
"object": post, "comment_form": form})
Run Code Online (Sandbox Code Playgroud)
使用基于类的视图有什么干净的方法可以做到这一点吗?或者只是将帖子显示代码与评论处理代码分离的某种方法?
这是我的更新视图,它由带有 slug 字段的 URL 调用,例如
/mymodel/update/<model_name_slug>/
Run Code Online (Sandbox Code Playgroud)
MyModel有两个字段,name和slug。slug 字段<model_name_slug>是从 自动生成的MyModel.name。如果用户更新它,将自动生成一个新的 slug 字段。然后,我想使用新生成的 slug 字段重定向到这个新 URL。
段塞场自动生成正在工作。它在MyModelEditForm. 但是,下面的代码不起作用。原因是:
1) 用户输入此 URL 以更新现有模型
/mymodel/update/example-model
Run Code Online (Sandbox Code Playgroud)
2) 用户将 Name 属性更改为"example model changed"。然后蛞蝓字段将作为生成"example-model-changed"在MyModel。
3) 但是 URL 没有重定向到"/mymodel/update/example-model-changed",因为get_object()将返回None. get()将无法将新生成的 URL"example-model-changed"与原始URL 进行比较"example-model"
我在下面的代码中缺少什么?我尝试使用 访问新的更新对象self.object,但出现以下错误:
MyModelUpdateView object has no attribute 'object'
Run Code Online (Sandbox Code Playgroud)
这是代码片段:
class MyModelUpdateView(LoginRequiredMixin, UpdateView):
model = MyModel
form_class = MyModelUpdateForm …Run Code Online (Sandbox Code Playgroud) 我刚刚开始搞乱基于类的视图,我希望能够从我的类中的URL访问变量.但是我很难让这个工作.我看到了一些答案,但它们都很短暂,我发现它们没有任何帮助.
基本上我有一个网址
url(r'^(?P<journal_id>[0-9]+)/$',
views.Journal_Article_List.as_view(),
name='Journal_Page'),
Run Code Online (Sandbox Code Playgroud)
然后我想ListView用来显示特定期刊中的所有文章.然而,我的文章表通过a链接到日志表journal_id.所以我最终做了以下事情
class Journal_Article_List(ListView):
template_name = "journal_article_list.html"
model = Articles
queryset = Articles.objects.filter(JOURNAL_ID = journal_id)
paginate_by = 12
def get_context_data(self, **kwargs):
context = super(Journal_Article_List, self).get_context_data(**kwargs)
context['range'] = range(context["paginator"].num_pages)
return context
Run Code Online (Sandbox Code Playgroud)
但是,journal_id不像函数视图那样传递.从我在上面阅读的主题中可以找到我可以使用的变量访问变量
self.kwargs['journal_id']
Run Code Online (Sandbox Code Playgroud)
但我有点迷失在我应该如何做到这一点上.我已经在类中直接尝试了它,它让我知道self不存在或者通过覆盖get_queryset,在这种情况下它告诉我as_view()只接受已经是类的属性的参数.
我尝试使用 CreateView 通过 UI 创建模型事件的对象 我的模型是
class Event(models.Model):
start = models.DateTimeField(_("start"), db_index=True)
end = models.DateTimeField(_("end"), db_index=True, help_text=_("The end time must be later than the start time."))
title = models.CharField(_("title"), max_length=255)
description = models.TextField(_("description"), blank=True)
rule = models.ForeignKey(Rule)
calendar = models.ForeignKey(Calendar)
Run Code Online (Sandbox Code Playgroud)
我的模型表单是
class EventForm(forms.ModelForm):
class Meta:
model=Event
fields=['start','end','title','description','rule','calendar',]
Run Code Online (Sandbox Code Playgroud)
我的网址是
url(r'^addEvent/$', CreateEventView.as_view(), name='add-event'),
Run Code Online (Sandbox Code Playgroud)
查看是
class CreateEventView(CreateView):
form_class=EventForm
template_name="createEventForm.html"
success_url='/eventListView/'
Run Code Online (Sandbox Code Playgroud)
我尝试在以下 HTML 模板中自动呈现此内容
{% extends "base.html" %}
{% load i18n %}
{% block body %}
<form method='POST'>{% csrf_token %}
{{form.as_p}}
<button type="submit">Save</button>
</form> …Run Code Online (Sandbox Code Playgroud) django-templates django-forms django-generic-views jquery-widgets bootstrap-datetimepicker
django ×9
python ×4
django-forms ×2
class ×1
detailview ×1
django-views ×1
listview ×1
modelform ×1
url ×1