2017-10-08 104 views
0

這是這個問題,這些問題如果我找到了這個問題的一個完整的答案,我會修改更新 - 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的各種組合,但這些都是盲目的猜測,讓我無處可尋。任何人都可以幫助解釋我錯過了什麼嗎?

回答

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或其他方式(我從來沒有嘗試過)將視圖加載到頁面中作爲彈出窗口。 此外,您不需要填寫評論表單中的「操作」字段。

+0

感謝您的幫助!我已經將'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',但我不確定這是什麼修正。你能進一步幫助嗎? –

+0

那麼,如果你想獲得主鍵,你只需要做一些事情:'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

相關問題