簡體   English   中英

Django以模型形式從對象傳遞初始值

[英]Django pass initial values from object in Model Form

我為模型ModelA有Django模型表單MyModelFormA (我在FormView使用它們)。

我想使用ModelA現有對象將初始值傳遞給表單,並在發生更改時ModelA創建新對象。

我一直在傳遞初始值,如下所示:

def get_form_kwargs(self):
    kwargs = super(MyFormView, self).get_form_kwargs()
    kwargs.update({'instance': ModelAObject})

我不知道為什么,但是何時驗證表單,如下所示

def form_valid(self, form):
    instance = form.save()

它只是更新現有的instance對象,而不是創建新的instance對象。

  1. HTTP請求是無狀態的,該請求如何知道在先前請求中正在處理的正在傳遞的instance

  2. 如何解決呢?

我想到做類似的事情

def get_initial(self):
    initial = model_to_dict(MyModelAObject)
    return initial

實際上,在MyModelFormA中只有MyModelA字段的子集。 最初將所有字段作為dict傳遞,不會造成任何麻煩嗎?

有什么優雅的處理方式嗎?

  1. 當您傳遞ModelForm實例時 ,它還將該實例的id字段也設置為表單的首字母。 因此,如果它在POST中收到ID,則將其視為現有對象並對其進行更新

  2. 您將需要傳遞各個字段的初始值(即ID除外)。 最好的方法是僅在ModelForm中傳遞初始所需字段

 def get_initial(self): return { 'a': MyModelAObject.a, .... } 

可能您可以嘗試以下方法:

def form_valid(self, form):
    if form.has_changed()
        instance = form.save(commit=False)
        instance.pk = None
        #if you have id 
        instance.id = None
        instance.save() #will give you new instance.

檢查在Django 1.4中,未記錄的Form.has_changed()和Form.changed_data是否按預期工作? 看看form.has_changed()如何工作。

暫無
暫無

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

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