2011-07-09 11 views
1
  • 私はプロジェクトを保存しています。
  • これは、プラクティショナーのインラインモデルを持っています。
  • Practitionerモデルのdef saveでは、別のレコードをSimple Authという別のテーブルに挿入するカスタムコードを実行しています。

私の考えは、私がviews.pyでやっているように、実務家にプロジェクトのインスタンスを渡すと、def saveが自己のプロジェクトを参照できるということでした。インラインの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、このようになります保存:何らかの理由simpleauth.project = self.projectについて

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) 

を任意の値を持っていないようです。なぜ私はこのようなプロジェクト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) 
関連する問題