【问题标题】:not able to get parent id record for saving a extra records on def save of inline无法获取父 ID 记录以保存内联的 def 保存的额外记录
【发布时间】:2011-07-09 13:29:50
【问题描述】:
  • 我正在保存一个项目。
  • 它有一个 Practitioner 内联模型。
  • 在 Practitioner 模型的 def 保存中,我正在运行自定义代码以将另一条记录插入另一个名为 Simple Auth 的表中。

我的想法是,如果我像在 views.py 中所做的那样将项目实例传递给从业者,那么 def save 将能够引用 self 的项目。

所以我的views.py 看起来像这样:

def form_valid(self, form):
    practitioner_form = context['practitioner_form']
    if practitioner_form.is_valid():
        self.object = form.save(commit=False)
        self.object.slug = slugify(self.object.title)
        self.object.save()
        practitioner_form.instance = self.object
        practitioner_form.save()
        return HttpResponseRedirect(reverse('profile_detail', kwargs={'username':user.username}))
    else:
        return self.render_to_response(self.get_context_data(form=form)) 

我的 Practitioner def save 是这样的:

def save(self, *args, **kwargs):
    if SimpleAuth.objects.filter(project=self.project,name=self.practitioner_name).exists():
        simpleauth = SimpleAuth.objects.get(project=self.project,name=self.practitioner_name)
        simpleauth.project = self.project
        simpleauth.name = self.practitioner_name
        simpleauth.save()
    else:
        SimpleAuth.objects.create(project = self.project, name = self.practitioner_name)
    super(Practitioner, self).save(*args, **kwargs)

出于某种原因 simpleauth.project = self.project 似乎没有任何价值。为什么我不能这样获取项目ID?

只是一个注释。如果我通过管理员创建我的项目,那么一切正常。在我的表单上,这不起作用。

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    我认为这不是最好的方法,但现在它有效。如果没有人以更优雅的方式回答,那么我会将其标记为答案。

    在 def save 中我添加了一个 get_object_or_404。

    def save(self, *args, **kwargs):
        project = get_object_or_404(Project, pk=self.project_id)
        if SimpleAuth.objects.filter(project=self.project,name=self.practitioner_name).exists():
            simpleauth = SimpleAuth.objects.get(project=project,name=self.practitioner_name)
            simpleauth.project = project
            simpleauth.name = self.practitioner_name
            simpleauth.save()
        else:
            SimpleAuth.objects.create(project = project, name = self.practitioner_name)
        super(Practitioner, self).save(*args, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多