2013-07-29 52 views
6

我想Edit/Update使用Django Updateview排除字段編輯與更新視圖Django的模型對象

model.py模型對象(記錄)

from django.db import models 
from myapp.models import Author 

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    book_name = models.CharField(max_length=260) 
    amount = models.DecimalField(
     max_digits=10, decimal_places=2, default=0.00) 

    description = models.TextField() 

views.py

class BookEditView(generic.UpdateView): 
    model = Book 
    template_name_suffix = '_update_form' 
    exclude = ('author',) 

    def get_success_url(self): 
     return reverse("books:list_of_books") 

books_update_from。 HTML

{% extends "base.html" %} 
{% block main_title %}Edit Book{% endblock %} 
{% block content %} 
    <form method="post" action="" class="form-horizontal"> 
    {{form.as_p}} 
    </form> 
{% endblock %} 

當形式呈現,在Author洋場仍然在頁面上展示,即使我在BookEditviewexclude提到如上

那麼如何來隱藏字段,並提交形式?

此外,我嘗試通過渲染個別字段,如form.book_name,form.amount等(我知道這種方法不能解決上述問題,但只是給了一個愚蠢的嘗試)。當我提交表格時,它的行爲是可以忽略的,並且什麼都不做,因爲我們沒有提交author foreign key value,因此表格無效,並且提交也沒有做任何事情

所以我想知道的是如何排除該字段使用UpdateView編輯模型渲染它作爲一種形式,當模型(我是做錯了什麼上面我的代碼?)

我也想知道的Updateview的概念,如果我們排除foreignKey領域則沒有是否需要提交外鍵值?(因爲只有在包含Author Foreign Key的每個字段都提交值時,編輯表單纔有效)?

回答

6

定義排除領域的BookForm,

class BookForm(forms.ModelForm): 
    class Meta: 
     model = Book 
     exclude = ('author',) 

然後用這種形式在你看來

class BookEditView(generic.UpdateView): 
    model = Book 
    form_class = BookForm 
    ... 
+0

:感謝您的回覆,k是有什麼辦法可以提交外鍵值當我們點擊提交?我的意思是我們可以重寫form_data或一些方法中的這種行爲? –

+0

如果你想改變作者,你可以重寫'form_valid'方法。請參閱文檔中的[本示例](https://docs.djangoproject.com/en/1.5/topics/class-based-views/generic-editing/#models-and-request-user)。否則,我不確定你的意思 - 當你故意從表格中排除它時,你爲什麼要提交價值? – Alasdair

+0

抱歉,我的意思是如果我們沒有爲此寫一個表格類。無論如何,我從上述答案中得到了解決方案,但是如果我們還沒有創建表單類,還想進一步學習嗎?如何排除外地字段,因爲排除在Updateview中不起作用 –

相關問題