'PageSmartLinkWidget' object has no attribute 'language'

15 февраля 2016 г. 23:23

При использовании PageSmartLinkField может возникнуть ошибка AttributeError: 'PageSmartLinkWidget' object has no attribute 'language'. Возможно, какая-то настройка нужна или это недоработка виджета, но ошибку можно исправить, добавив поле "language" и немного подшаманив:

# models.py
from django.db import models

class Example(models.Model):
    link = models.CharField('Ссылка на страницу', max_length=255, blank=True)
# admin.py
from django.contrib import admin
from my_app.models import Example
from my_app.forms import ExampleForm

@admin.register(Example)
class ExampleAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('link', 'language'),
        }),
    )
    form = ExampleForm
# forms.py
from __future__ import absolute_import, print_function, unicode_literals

from django import forms
from django.forms.models import ModelForm
from django.forms.widgets import HiddenInput
from django.utils.translation import get_language

from cms.utils.i18n import get_language_tuple
from cms.forms.fields import PageSmartLinkField

from my_app.models import Example


class ExampleForm(ModelForm):
    link = PageSmartLinkField(label=u'Ссылка на страницу', required=False, placeholder_text=u'Начните набирать...',
                              ajax_view='admin:cms_page_get_published_pagelist')

    language = forms.ChoiceField(label=_("Language"), choices=get_language_tuple(),
                                 help_text=_('The current language of the content fields.'))

    class Meta:
        model = Example
        exclude = ('language', )

    def __init__(self, *args, **kwargs):
        super(ExampleForm, self).__init__(*args, **kwargs)
        self.fields['language'].widget = HiddenInput()

        if not self.fields['language'].initial:
            self.fields['language'].initial = get_language()

        if 'link' in self.fields:
            self.fields['link'].widget.language = self.fields['language'].initial

Обратите внимание, я не зря привёл в качестве примера ещё и ExampleAdmin. Если указываете в admin классе fieldsets, то нужно указать ещё и 'language', иначе не заработает.

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/page-smart-link-widget-error/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/page-smart-link-widget-error/">https://vivazzi.pro/ru/it/page-smart-link-widget-error/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц