0

연락처 사람을 표시하는 간단한 플러그인을 작성했지만 특정 페이지에서 일부 연락처를 제외해야합니다. 그래서 "structure_to_exclude"ManyToMany 관계를 사용하는 플러그인에 관련 모델을 추가했습니다. 내 문제는, 내가 변수를 가져올 때 항상 공백입니다.장고 CMS - 플러그인 manyToMany 변수 항상 빈

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() 결과 : [Grammont>, 마이 엔>, AI>]

정상에 bugy 왜 어떤 생각 편집 모드가 아닌 모드? 감사합니다.

EDIT : 인스턴스 ID가 변경 되었습니까? 누구든지이 문제를 한 번 겪었습니까?

편집 2 : 나는 GitHub의에 divio의 환매 특약에 문제를 열어이 문제의 본질을 고려 : 게시하면 모든 사용자가 만든 플러그인에 대한 https://github.com/divio/django-cms/issues/5747

1

는 두 가지 버전이있다. 공개 버전 및 초안 버전. 따라서 ID가 변경되는 것은 완벽합니다.

관계가 프로젝트마다 다르므로 플러그인에 관계가있을 때마다 cms에게 페이지를 게시 할 때 이러한 관계를 "복사"하는 방법을 명시해야합니다.

다음과 같은 방법을 가지고 플러그인 모델을 적용하십시오 :

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

당신은 우리의 docs에 관계 플러그인에 대한 자세한 내용을보실 수 있습니다.