2017-10-22 6 views
0

Djangoの自動作成オブジェクトに問題があります。助けてください。 私がいることをアバターモデルを持っている:私はヌルフォトセットでモデルのアバターを保存するときにDEFを作成したいDjangoに保存するとForeignKeyでオブジェクトを自動作成します

class Avatar(models.Model): 
    owner = models.ForeignKey(User, related_name='avatar_owner') 
    photoset = models.ForeignKey(PhotoSet, null=True) 
    image = models.ImageField(max_length=1024, upload_to=avatar_file_path) 

とモデル

class PhotoSet(models.Model): 
    title = models.CharField(_('title'), max_length=200, null=True) 

、それは自動一定でフォトセットをget_or_createますタイトル。私はこれのようなdefを作ったが、それは仕事ではない。

@transaction.atomic 
def create_default_photoset(self, *args, **kwargs): 
    if self.photoset is None: 
     self.photoset, _ = Photoset.objects.get_or_create(title=self.id) 

    super(Avatar, self).create_default_photoset(*args, **kwargs) 

私はこのdefで間違っていますか?どうすれば修正できますか?前もって感謝します!

+0

すべての私のコードはありますか?アバターの 'save'の前に呼び出すと、' self.id'はNoneになります – Igor

+0

そして別の同意 - 'super(Avatar、self).create_default_photoset'それは親クラスの呼び出しですが、私はそのモデルとは思いませんそのような方法がある。とにかく、「うまくいかない」ともっと詳しく説明してください。エラーのトレースバック – Igor

+0

@Igorは機能しません。これはすべてdefです。 –

答えて

0
def save(self, *args, **kwargs): 
    if self.id is None: 
     saved_image = self.image 
     self.image = None 
     super(Avatar, self).save(*args, **kwargs) 
     self.image = saved_image 
    if self.photoset is None: 
     self.photoset, _ = Photoset.objects.get_or_create(title='test') 
     super(Avatar, self).create_default_photoset(*args, **kwargs) 

    super(Avatar, self).save(*args, **kwargs) 

@Igor:これは、あなたのメソッドを呼び出します

+0

親クラスの*呼び出しメソッドを意味する 'super(Avatar、self).create_default_photoset(* args、** kwargs)'を使用します。それを 'self.create_default_photoset(* args、** kwargs)'と置き換えてみてください。 – Igor

+0

これはすべて私のコードです。あなたの解決策も機能しません。 http://collabedit.com/c2aa5。どうぞこの機能は - super(Avatar、self).create_default_photoset(* args、** kwargs) 'とは何かを見てください。 –

+0

私はdjangoがそのようなメソッドを定義しているかどうかはわかりませんが、私は考えません。では、ここでどのような方法で呼びかけようとしていますか?また、*「うまくいきません」と言ったとき* - トレースバックを提供するか、実際の動作と望ましい動作を記述してください – Igor

関連する問題