2014-02-19 33 views
0

我的Django模型:Django的FormView的工作

class ProjectFile(models.Model): 

    TYPES = (
     (1, "Public"), 
     (2, "In Project"), 
     (3, "Specific") 
    ) 

    project = models.ForeignKey(Project) 
    file = models.FileField(upload_to="files/") 
    type = models.SmallIntegerField(choices=TYPES) 

    created_by = models.ForeignKey(User) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    def __unicode__(self): 
     return self.file.name + " - " + self.project.name 

    def is_downloadable(self, user): 
     if self.file.project.type == 1: 
      return True 

     return False 

和形式:

class FileUploadForm(forms.ModelForm): 

    class Meta: 
     model = ProjectFile 
     exclude = ['created_by', 'created_at', 'updated_at', 'project'] 

我的視圖類(FormView控件)是:

class UploadFileView(FormView): 
    form_class = FileUploadForm 
    template_name = "project/file_upload.html" 

所以,我現在的問題是:如何向我的views.py中的排除字段添加數據UploadFileForm。例如,created_by必須等於request.user

+0

http://stackoverflow.com/q/7147059/400691可能的重複 – meshy

回答

1

如果你的觀點是爲了創建一個ProjectFile,我會建議你使用CreateView,並覆蓋form_valid方法。

from django.views.generic import CreateView 

class UploadFileView(CreateView): 
    form_class = FileUploadForm 
    template_name = 'project/file_upload.html' 
    def form_valid(self, form): 
     form.instance.user = self.request.user 
     return super(UploadFileView, self).form_valid(form) 

你仍然可以覆蓋甚至如果你想使用FormView同樣的方法。