簡體   English   中英

將Django通用CreateView與字段editable = False一起使用

[英]Using Django generic CreateView with field editable=False

我正在使用類似於/foo/1/bar/create的url方案,在該方案中,我創建的Bar對象的ID為1,該對象的外鍵指向現有的Foo對象。使用editable=FalseBar內進行Foo

Django文檔為處理字段editable=False或您已從表單中排除但在save()上必填的字段提供了一些一般性建議,但沒有針對使用通用CreateView任何建議。

我的CreateBarView已經通過URL獲取了Foo ID,因此它已經在視圖的self.kwargs 我正在嘗試接受通用視圖以保持干燥。

在Django的通用視圖中是否有直接的方法? 尤其是不必對表單進行子類化?

注意:覆蓋get_initial()不起作用,我相信文檔也支持。

編輯:Django 1.9

閱讀Django通用視圖后,如果我遵循一般文檔 ,例如,通過get_form_kwargs覆蓋get_form()可能是最直接的方法,例如,

class FormMixin(...): # from django.views.generic.edit

    def get_form(self, form_class=None):                                        
        """                                                                     
        Returns an instance of the form to be used in this view.                
        """                                                                     
        if form_class is None:                                                  
            form_class = self.get_form_class()                                  
        return form_class(**self.get_form_kwargs())      

所以,

class CreateBarView(...):

   def get_form_kwargs(self):
      kwargs = super(CreateBarView, self).get_form_kwargs()
      kwargs['instance'] = Bar(foo_id=self.kwargs['foo_id'])
      return kwargs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM