0

連絡先の人を表示するシンプルなプラグインを作成しましたが、特定のページでいくつかの連絡先を除外する必要があります。そこで、 "structure_to_exclude" ManyToMany関係を使用するプラグインに関連するモデルを追加しました。私の問題は、私はこの変数を取得すると、それは常に空です。Django cms - プラグインmanyToMany変数always empty

cms_plugins.py

class VMContactContactPlugin(CMSPluginBase): 
    module = 'VM Contact Plugin' 
    render_template = 'vm_contact/calendars/contacts_list.html' 
    model = VMContactCalendarPluginModel 
    name = _('VM Contact plugin') 

    def render(self, context, instance, placeholder): 
     print 'Instance : {0}'.format(instance) 
     inst = instance.structure_to_exclude.all() 
     print 'Instance.all() result : {0}'.format(inst) 
     structures = Structure.objects.exclude(contact=None).exclude(pk__in=instance.structure_to_exclude.all().values_list('id',flat=True)) 
     context.update({ 
      'structures': structures, 
     }) 
     return context 

plugin_pool.register_plugin(VMContactContactPlugin) 

関連モデル

class VMContactCalendarPluginModel(CMSPlugin): 
    structure_to_exclude = models.ManyToManyField(
     Structure, 
     verbose_name=_(u'Structures à exclure'), 
    ) 

構造モデル(多型!!)

class Structure(PolymorphicModel): 
    contact = models.ForeignKey(Contact, blank=True, null=True) 
    members = models.ManyToManyField(Contact, blank=True, null=True, related_name='%(class)s_members') 
    title = models.CharField(max_length=50, default='Castor') 
    description = models.CharField(max_length=254, blank=True) 
    categories = CategoryManyToManyField('aldryn_categories.Category', 
             verbose_name=_('categories'), 
             blank=True) 
    calendars = models.ManyToManyField(Calendar, blank=True) 
    has_pages = models.BooleanField(default=True) 
    avatar = FilerFileField(null=True, blank=True, 
           on_delete=models.SET_NULL) 
    classcss = models.CharField(max_length=1, choices=CSS_CLASS, default='5') 
    order = models.PositiveSmallIntegerField(default=0) 
    class Meta: 
     ordering = ['order'] 

印刷結果:

インスタンス:93

Instance.all()結果:[]

アイデアはありますか?私はインスタンスvarを持つ問題ではないことを確認するために、ID(93)を持つプラグインインスタンスを取得しようとしました... よろしくお願いします。

答えて

0

"編集中"ジャンゴ-CMSのモードでは、私のコードが動作している...

インスタンス:92 Instance.all()結果:[グラモン>、マイエン>、AI>、]

それは通常でbugy理由ですすべてのアイデア編集中ではないのですか? よろしくお願いいたします。

EDIT:インスタンスIDが変わるのは正常ですか?誰もこの問題を一度も持っていますか?

EDIT 2:私はgithubののdivioレポに問題を開いて、この問題の本質を考える:https://github.com/divio/django-cms/issues/5747

1

すべてのユーザーが作成するプラグインについては、パブリッシュ一度2つのバージョンがあります。 公開バージョンと草稿バージョン。だから、IDの変更は完全にうまくいく。

リレーションシップはプロジェクトごとに異なるため、プラグインにリレーションシップがある場合はいつでも、ページのパブリッシュ時にこれらのリレーションシップを「コピー」する方法を明示的にcmsに伝える必要があります。

次のメソッドを持っているあなたのプラグインモデルを適応してください:

def copy_relations(self, oldinstance): 
    self.structure_to_exclude = oldinstance.structure_to_exclude.all() 

あなたは私たちのdocs中関係のプラグインについての詳細を読むことができます。

関連する問題