【问题标题】:Set user attribute after project creation创建项目后设置用户属性
【发布时间】:2018-02-21 03:13:26
【问题描述】:

在我的应用中,用户可以通过命名来创建项目。

这是我的模型:

class Project(models.Model):
    name = models.CharField(max_length=250)
    team_id = models.ForeignKey(Team, blank=True, null=True)
    project_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)

    def get_absolute_url(self):
        return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk})

    def __str__(self):
        return self.name

这是我的看法:

class ProjectCreate(CreateView):
    model = Project
    fields = ['name']
    template_name = 'project_form.html'

当用户使用自己的ID创建项目project_hr_admin = models.ForeignKey(MyUser, blank=True, null=True) 并将其保存在数据库中时如何设置??

谢谢你

【问题讨论】:

  • 使用自定义save 方法
  • 更好,通过覆盖视图上的form_valid,这在editing views documentation 中有专门介绍。
  • 谢谢丹尼尔它完美地工作..如果你能解释我这行 super(AuthorCreate, self).form_valid(form), 或其他文档好吗?

标签: django django-models django-views


【解决方案1】:

希望这会有所帮助。

class ProjectCreate(CreateView):
    model = Project
    fields = ['name']
    template_name = 'project_form.html'


    def form_valid(self, form):
        form.instance.project_hr_admin = self.request.user
        return super(ProjectCreate, self).form_valid(form)

或者你也可以重写form_valid函数为

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.project_hr_admin = self.request.user
        obj.save()
        return HttpResponseRedirect('YOUR_SUCCESS_URL')

来源:Django Documentation

【讨论】:

  • 嗨,kartikmaji thx 为您的回答,我使用了 Daniel Roseman 提供的文档,但我相信您的文档也可以:)
  • @Ben2pop 没问题。乐意效劳。 :) 我已经编辑了答案。让我知道其他方法是否适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多