2011-07-09 30 views
1
  • 我正在保存一個項目。
  • 它有一個醫生內聯模型。
  • 在實踐者模型的def保存中,我正在運行自定義代碼以將另一個記錄插入另一個名爲Simple Auth的表中。

我的想法是,如果我將項目實例傳遞給醫生,就像我在views.py中做的那樣,那麼def保存就可以引用自己的項目。無法獲得父母ID記錄以保存額外的記錄保存內聯

所以我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)) 

我從業高清保存這個樣子的:

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?

只是一個說明。如果我通過管理員創建我的項目,那麼它一切正常。這在我的表格上是行不通的。

回答

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)