2016-12-06 36 views
2

我有一個使用我的模型來生成一個「創建」屏幕下面基於類的觀點:generic.edit.CreateView默認值分配,並插入到數據庫

class ProjectCreateView(generic.edit.CreateView): 
    model = Project 
    fields = ['project_title','project_description','created_date'] 
    template_name = 'steps/project-detail.html' 
    success_url = reverse_lazy('index') 

型號:

class Project(models.Model): 
    project_title = models.CharField(max_length=200) 
    project_description = models.CharField(max_length=200, default="") 
    created_date = models.DateTimeField('date created') 
    owner = models.ForeignKey(User) 

    def __str__(self): 
     return self.project_title 

現在,問題是如果我不想讓'created_date'成爲實際的形式。相反,我希望在按下「提交」按鈕或將記錄添加到數據庫中時自動填充它。我怎樣才能做到這一點?

最後,是否可以在默認情況下指定owner字段?也就是說,我需要使用創建此記錄的用戶的信息來填充該字段。

回答

2

ownercreated_date從字段列表中排除。然後在調用super()之前覆蓋form_valid並在窗體的實例上設置值。

由於您正在設置所有者,因此您可以使用LoginRequiredMixin來確保只有登錄用戶才能訪問該視圖。

from datetime import datetime 

from django.contrib.auth.mixins import LoginRequiredMixin 
from django.views.generic.edit import CreateView 


class ProjectCreateView(LoginRequiredMixin, CreateView): 
    model = Project 
    fields = ['project_title','project_description'] 
    template_name = 'steps/project-detail.html' 
    success_url = reverse_lazy('index') 

    def form_valid(self, form): 
     form.instance.owner = self.request.user 
     form.instance.created_date = datetime.now() 
     return super(ProjectCreateView, self).form_valid(form) 
+1

有關使用['auto_now_add'](https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.DateField.auto_now_add),用於日期時間字段什麼代替? – AKS

+1

@AKS是的,在模型字段中使用'auto_now_add'是一個很好的建議。在這種情況下,'form.instance.created_date = datetime.now()'行可以從代碼中移除。 – Alasdair

+0

這看起來如何?如在中,如果我將auto_now_add添加到模型中,則會出現錯誤。 – MadPhysicist