这是这些问题的更新,如果我找到这个问题的完整答案,我会修改这些问题 - How do I 'Autofill' a CreateView field
我有一个Artist模型,我现在正尝试使用ArtistComment模式和模态div上的CreateView表单向DisplayView添加注释功能。我认为我真的很接近让这个工作,但我有一个小问题,将主键从我的artistdetail.html
页面传递到我的artistcomment_form.html
模板。任何有关此的帮助,或阅读文档页面的提示将不胜感激。
urls.py:
url(r'^artist-(?P<pk>[0-9]+)/$', login_required(views.ArtistDetailView.as_view()), name='artistdetail'),
url(r'^artist-(?P<pk>[0-9]+)/artistcomment/add/$', login_required(views.ArtistCommentCreate.as_view()), name='artistcomment-add'),
views.py:
class ArtistCommentCreate(CreateView):
model = ArtistComment
fields = ['message',]
def get_success_url(self):
return reverse('events:artistdetail', kwargs={'pk': self.object.artist_id})
def form_valid(self, form, *args, **kwargs):
form.instance.author = self.request.user
form.instance.artist = get_object_or_404(Artist, id=self.kwargs.get('pk'))
return super(ArtistCommentCreate, self).form_valid(form)
artistdetail.html:
<p id="commentfooter"><a href="{% url 'events:artistcomment-add' artist.id %}">Add A New Comment</a></p>
artistcomment_from.html:
{% block body %}
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-body">
<form class="form-horizontal" action="{% url 'events:artistcomment-add' pk %}" method="post" enctype="multipart/form-data" onSubmit="CloseModal();">
{% csrf_token %}
{% include "events/form-template.html" %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
</div>
据我所知,我在artistcomment_form.html
中输入'pk'的位置是我应该引用存储在URL中的主键。我已经尝试过artist.id artist.artistid artist.pk的各种组合,但这些是盲目的猜测让我无处可去。任何人都可以帮助解释我所缺少的东西吗?
答案 0 :(得分:0)
您需要做的就是:
class ArtistCommentCreate(CreateView):
# ...
def get_context_data(self, **kwargs):
context = super(ArtistCommentCreate, self).get_context_data(**kwargs)
context['pk'] = # Whatever you want to add here (e.g. self.object.artist_id)
return context
更好地将整个艺术家模型作为一个整体加载到您的上下文中,并在CreateView中添加一个模板(artistcomment.html),因为它需要一个。我认为可以将iFrame左右的视图(我从未尝试过)作为弹出窗口加载到您的页面中。 此外,您无需填写评论表单中的“操作”字段。