這是這個問題,這些問題如果我找到了這個問題的一個完整的答案,我會修改更新 - How do I 'Autofill' a CreateView field傳遞一個主鍵表單模板
我有一個藝術家的模型,現在我正在努力使用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的各種組合,但這些都是盲目的猜測,讓我無處可尋。任何人都可以幫助解釋我錯過了什麼嗎?
感謝您的幫助!我已經將'get_context_data'部分添加到了我的ArtistComment CreateView中,就像您所描述的那樣,並從我的評論表單中刪除了'action'字段; \t'DEF get_context_data(個體,** kwargs): \t \t上下文=超級(ArtistCommentCreate,自我).get_context_data(** kwargs) \t \t上下文[ 'PK'] = self.object.artist_id \t \t返回上下文' 但我現在收到'NoneType'對象沒有屬性'artist_id'消息。我假設它來源於'context ['pk'] = self.object.artist_id',但我不確定這是什麼修正。你能進一步幫助嗎? –
那麼,如果你想獲得主鍵,你只需要做一些事情:'context ['author'] = self.object'。然後,在您調用的模板中:'{{object.pk}}'返回您在CreateView中指定的模型實例的主鍵。如果你看看[Django Docs](https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#createview),你可以看到CreateView的繼承類這應該讓你瞭解該視圖如何處理數據。希望有所幫助! – Herbert