2012-06-01 49 views
0

所以我有一個模型表單 - 這是爲django的難以置信的不直觀的編輯模型過程,如果任何人有一個堅實的「白癡」教程,我會熱衷於聽到它!django - 如何添加一個新的值到現存的modelForm?

手頭的問題是將一個值添加/設置到modelForm字段,以便它顯示在html中。

所以,我有這樣的代碼在我看來邏輯:

class EditSaveModel(View): 

    def get(self,request,id=None): 
     form = self.getForm(request,id) 
     return self.renderTheForm(form,request) 

    def getForm(self,request,id): 
     if id: 
      return self.idHelper(request,id) 
     return PostForm() 

被稱爲一個「得到」。所以,在這裏,我想要展示一個預先完成的表格,或者一個新的表格!

鑽入idHelper:

def idHelper(self,request,id): 
     thePost = get_object_or_404(Post, pk=id) 
     if thePost.story.user != request.user: 
      return HttpResponseForbidden(render_to_response('errors/403.html')) 
     postForm = PostForm(instance=thePost) 
     postForm.fields.storyId.value = thePost.story.id **ANY NUMBER OF COMBOS HAVE BEEN TRIED! 
     return postForm 

我在哪裏得到一個交對象,檢查它屬於有效用戶,然後安裝一個新的值到它 - 「storyId」

我也試過,上面:

postForm.storyId.value = thePost.story.id 

但告訴我,postForm 沒有storyId值設置!

和:

postForm.storyId = thePost.story.id 

,但實際上並不設置的storyId - 也就是說,在HTML中,沒有值存在。有

看看我PostForm定義:

class PostForm(forms.ModelForm): 
    storyId = forms.IntegerField(required=True, widget=forms.HiddenInput()) 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(PostForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = Post 
     ordering = ['create_date'] 
     fields = ('post',) 

    #some validation here! 
    #associates the new post with the story, and checks that the user adding the post also owns that story 
    def clean(self): 
     cleaned_data = super(PostForm, self).clean() 
     storyId = self.cleaned_data.get('storyId') 
     storyArray = Story.objects.filter(id=storyId,user=self.request.user.id) 
     if not len(storyArray): #eh, this means if self.story is empty. 
      raise forms.ValidationError('Whoops, something went wrong with the story you\'re using . Please try again') 
     self.story = storyArray[0] 
     return cleaned_data 

權,所以這是清楚了嗎?總結:

我想要一個隱藏 storyId字段附加到我的PostForm,以便我總是知道給定的帖子附加到哪個故事!現在,我知道可能有其他方法來做到這一點 - 我可能能夠以某種方式將「外鍵」添加爲「隱藏」?歡迎,請告訴我如何!但是我現在真的很想把ForeignKey作爲一個隱藏的領域,所以可以自由地提出一個不同的方式,而且還將外鍵作爲隱藏的模型表達式問題來回答。

通過上面所有的代碼,我會想象我可以有這樣的HTML(因爲我的形式肯定是所謂的「形式」):

{% for hidden in form.hidden_fields %} 
    {{ hidden.errors }} 
    {{ hidden }} 
{% endfor %} 

甚至

{{ form.storyId }} 

但這不起作用! storyId將永遠不會顯示爲設定值。

這是怎麼回事?

回答

1

你有沒有試過把它傳遞給構造函數?

def __init__(self, *args, **kwargs): 
    self.request = kwargs.pop('request', None) 
    self.story_id = kwargs.pop('story_id', None) 
    super(PostForm, self).__init__(*args, **kwargs) 
    self.fields['storyId'].initial = self.story_id 
+0

是的,試過了,沒有骰子。 (是的,我也將這個值傳給了init函數!) – bharal

+0

等等,不。我嘗試了錯誤。有用!我的英雄! – bharal

相關問題