【问题标题】:Working with Django's FormView使用 Django 的 FormView
【发布时间】:2014-02-19 19:28:07
【问题描述】:

我有 django 模型:

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"

所以,我现在的问题是:如何为UploadFileFormviews.py 中的排除字段添加数据。例如created_by需要等于request.user

【问题讨论】:

标签: python django django-forms


【解决方案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,您仍然可以覆盖相同的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 2013-09-17
    • 2016-07-30
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2014-07-07
    • 2014-01-18
    相关资源
    最近更新 更多