2016-06-14 65 views
0

我正在學習有關modelforms幫手,這是我的理解是對錶單驗證的最佳實踐會形式簡單地保存到數據庫模型對象經過簡單的代碼如下所示:保存Django的形式到DB

def my_view(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = MyForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 

      form.save() 

      return redirect somewhere 

    else: 
     form = MyForm() 

return render(request, 'mysite.html', {'form': form})  

但是,我想添加到此模型對象中的額外數據,該數據對象在表單中未顯式指定。例如,如果我想向服務器端生成的對象添加日期戳,該怎麼辦?我如何着手將更多信息保存到同一個模型對象中,以及這樣做的最佳實踐是什麼?

+0

你對'更多數據'有什麼意義?更多領域的模型? – trantu

+0

用'commit = False'調用保存。 SO上有數百個例子。 –

+0

通過更多的數據我的意思是更多的領域。假設我的模型中有一個字段是創建日期時間,但我想在服務器端生成該日期,而不是通過表單生成。之後如何將這些額外的字段添加到數據庫中的模型對象? – DudeDudeDude

回答

0

對於trackin創建/修改日期,您可以使用「DateTimeField字段」:

created = models.DateTimeField(auto_now_add=True, editable=False) 
updated = models.DateTimeField(auto_now=True, editable=False) 

auto_now_add創建新對象時插入當前datetime,而auto_now不更新時相同。

對於更具體的邏輯,您可以使用post_savepre_save信號,或覆蓋save方法。

# overriding save 
class MyModel(models.Model): 
    # ... 
    def save(self, *args, **kwargs): 
     self.my_field = 'whatever' 
     super(MyModel, self).save(*args, **kwargs) 

# using signals 
from django.db.models.signals import pre_save 
from django.dispatch.dispatcher import receiver 

@receiver(pre_save, sender=MyModel) 
def message_post_save(sender, instance, **kwargs): 
    instance.my_field = 'whatever'