2016-07-17 3 views
1

私はdjango-polymorphicモデルを持っており、post_saveシグナルを実装して、多型である関連モデルを自動的に作成したいと考えています。django-polymorphicでpost_saveレシーバを使用するには?

これは、以下のコードのようなものです。@receiverの修飾コードwork_post_saveがあります。問題はインスタンスがオブジェクトではなくctype_idであることです。

from django.db import models 
from django.db.models import signals 
from django.dispatch import receiver 
from polymorphic.models import PolymorphicModel 

from mygallery.models import Album 

# Work Parent PolymorphicModel 
class Work(PolymorphicModel): 
    title = models.CharField(blank=True,max_length=256) 
    slug = models.SlugField(max_length=256) 

@receiver(signals.post_save, sender=Work) 
def work_post_save(sender, instance, signal, created, **kwargs): 
    album, new = Album.objects.get_or_create(title=instance.title + ' Stills', slug=instance.slug + '-stills') 
    work_album, new = WorkAlbum.objects.get_or_create(work=instance, album=album, is_key=True) 


class ArtProject(Work): 
    manifesto = models.CharField(blank=True,max_length=256) 

class CodeProject(Work): 
    code = models.CharField(blank=True,max_length=256) 


# Content Parent PolymorphicModel 
class WorkContent(PolymorphicModel): 
    is_key = models.BooleanField(default=False, unique=True, default=False) 


class WorkAlbum(WorkContent): 
    work = models.ForeignKey(Work, related_name='work_albums') 
    album = models.ForeignKey(Album, related_name='album_works') 

答えて

0

私はこのことをちょっとはめ込んでしまったので、これを正しく処理する方法が何であるかは100%わかりません。

最後に、にはであり、@receiverアノテーションでsenderと宣言していません。これは、すべてのpost_saveシグナルによってコールバックがトリガーされるという効果があります。コールバックで私の親モデル(あなたのケースではWork)とisinstance()をチェックするので、興味のあるモデルが保存された後にコールバックが実行されるだけです。コールバックが実行されると、instanceパラメータは子モデル(ケースではArtProjectまたはCodeProject)です。親save()に直接トリガ

@receiver(signals.post_save) 
def work_post_save(sender, instance, signal, created, **kwargs): 
    if isinstance(instance, Work): 
     # instance is either ArtProject or CodeProject 
     album, new = Album.objects.get_or_create(title=instance.title + ' Stills', slug=instance.slug + '-stills') 
     work_album, new = WorkAlbum.objects.get_or_create(work=instance, album=album, is_key=True) 

は明らかにnot supportedです。

関連する問題