Добрый день. Столкнулся с каким-то неадекватным поведением django-cms.
Описываю модель
# models.py
class Email(models.Model):
email = models.EmailField(blank=False, null=False, verbose_name=u'Электронная почта')
order = models.IntegerField(blank=False, null=False, default=0, verbose_name=u'Сортировка')
contact_block = models.ForeignKey('contact.ContactBlockPlugin', related_name='emails', blank=False, null=False)
def __unicode__(self):
return self.email
class Meta :
ordering = ['order',]
class ContactBlockPlugin(CMSPlugin):
address = models.TextField(blank=False, null=False, verbose_name=u'Адрес')
И регистрирую плагины, согласно документации (
django-cms.readthedocs.org/en/latest/how_to/custom... )
# cms_plugins.py
class EmailInlineAdmin(admin.TabularInline):
model = Email
class CMSContactBlockPlugin(CMSPluginBase):
model = ContactBlockPlugin
module = u'Контакты'
name = u'Контактный блок'
render_template = 'contact/contact_block.html'
inlines = (EmailInlineAdmin, )
plugin_pool.register_plugin(CMSContactBlockPlugin)
Вроде все прекрасно… Я, как авторизованный пользователь, наполняю email'ы с фронтенда.
В шаблоне я спокойно итерируюсь по списку email'ов
{% if instance.emails.all|length > 0 %}
<div class="b-contacts mail">
{% for email in instance.emails.all %}
<a href="mailto:{{ email.email }}">{{ email.email }}</a>
{% endfor %}
</div>
{% endif %}
Это если я авторизован. Но если я попытаюсь открыть эту страницу как гость (не залогинившись), то коллекция
instance.emails.all
оказывается пустой.
Я подозреваю, что дело в правах, но не могу понять, где их можно настроить для моих моделей.
Согласно документации, я попробовал переопределить функцию render как-то так
def render(self, context, instance, placeholder):
context = super(CMSContactBlockPlugin, self).render(context, instance, placeholder)
context.update({
'emails': instance.emails.all()
})
return context
и итерироваться так:
{% for email in emails %}
<a href="mailto:{{ email.email }}">{{ email.email }}</a>
{% endfor %}
Но результат остался прежним.
Дебажил — просто пустая коллекция.
Что делать, ума не приложу.