Найти - Пользователи
Полная версия: django 2.0.5 (py3.6.4 x64, x64 win7) AttributeError: 'list' object has no attribute 'split'
Начало » Django » django 2.0.5 (py3.6.4 x64, x64 win7) AttributeError: 'list' object has no attribute 'split'
1
Florenzo
Прошу помощи:
у меня:
django 2.0.5, python 3.6.4 x64, Win7 тоже x64
(клон на virtualenv-е)
весь прожект прикреплен тут в архиве

так вот,
благополучно делаю вот этот пример (django pools):
https://djangosimple.blogspot.com/2012/02/32.html
все работает, и в самом конце статьи
в файле pools/admin.py
предлагается добавить date_hierarchy (что я и делаю) в классе
 class QuestionAdmin(admin.ModelAdmin):
    ....
    date_hierarchy = ['date_published']

получаю вот это:
AttributeError: ‘list’ object has no attribute ‘split’
 .....
    File "G:\_py_projects\_clones\py36virt01\lib\site-packages\django\contrib\admin\utils.py
    ", line 483, in get_fields_from_path
    pieces = path.split(LOOKUP_SEP)
    AttributeError: 'list' object has no attribute 'split'
    Завершить выполнение пакетного файла [Y(да)/N(нет)]? y

файл pools/admin.py:
 #--------------------------
from django.contrib import admin
# Register your models here.
from .models import Question, Answer
"""
class QuestionAdmin(admin.ModelAdmin):
    fields = ['is_active', 'date_published', 'title']
    # fields = ['date_published', 'title']
""" 
#class AnswerInline(admin.StackedInline):
class AnswerInline(admin.TabularInline):
    model = Answer
    extra = 2
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, 
            {'fields': ['title', 'is_active']}
        ),
        ('Информация о дате',
            {'fields': ['date_published'], 
            'classes': ['collapse']}
        ),
    ]
    inlines = [AnswerInline]
    #list_display = ('title', 'date_published', 'is_active')
    # # !!! (ч.3.2)   Добавим название метода модели is_popular()
    list_display = ('title', 'date_published', 'is_active', 'is_popular')
    list_filter = ['date_published']
    search_fields = ['title']
    date_hierarchy = ['date_published'] # !!! вот тут ошибка
    """
    File "G:\_py_projects\_clones\py36virt01\lib\site-packages\django\contrib\admin\utils.py
    ", line 483, in get_fields_from_path
    pieces = path.split(LOOKUP_SEP)
    AttributeError: 'list' object has no attribute 'split'
    Завершить выполнение пакетного файла [Y(да)/N(нет)]? y
    """
admin.site.register(Question, QuestionAdmin)

pools/models.py на всякий случай:
 #----------------
from django.db import models
# Create your models here.
import datetime
from django.db import models
#======================
# Импортируем настройки приложения polls
# import settings  # !!! (ч.3.2)  # <== было в оригинале - так не хочет
from polls import settings   # < == пришлось сделать так
#======================  
  
class Question(models.Model):
    """Вопрос"""
    title = models.CharField(max_length=200, verbose_name = "Вопрос")
    date_published = models.DateTimeField(verbose_name = "Дата публикации", 
        default = datetime.datetime.now())
    is_active = models.BooleanField(verbose_name = "Опубликован")
    # !!! (ч.3.2) Этот метод позволяет выявить Популярный опрос для показа в админке
    """
    def is_popular(self):
        answers = Answer.objects.filter(question_id=self.id)
        votes_total = sum([answer.votes for answer in answers])
        return votes_total > settings.POLLS_POPULAR_VOTES_LIMIT
    """
    """
    def is_popular(self):                      # !!! не показывает иконки,
                                               # а только html текст
        answers = Answer.objects.filter(question_id=self.id)
        votes_total = sum([answer.votes for answer in answers])
        if votes_total > settings.POLLS_POPULAR_VOTES_LIMIT:
            img_path = settings.IMG_TRUE_PATH
        else:
            img_path = settings.IMG_FALSE_PATH
        return '<img alt="" src="{}" />'.format(img_path)
    """
    def is_popular(self):  # !!! уже 3-й вариант !!! этот показывает иконки
        answers = Answer.objects.filter(question_id=self.id)
        votes_total = sum([answer.votes for answer in answers])
        return votes_total > settings.POLLS_POPULAR_VOTES_LIMIT
    # !!! (ч.3.2) Описание столбца в админке
    is_popular.short_description = 'Популярный'
    # Важно указать эту настройку, чтобы django не экранировал тэги
    ## is_popular.allow_tags = True ## !!! убираю, т.к. ее заменяет то, что ниже
    # Обратите внимание, мы укзали настройку is_popular.allow_tags = True. 
    # Она позволяет нам избежать экранирования и вывести html теги прямо из модели: 
    # Вот настройка, заменяющая False/True на иконки в админке
    is_popular.boolean = True
 
    def __str__(self):
        return self.title
 
    class Meta:
        verbose_name = 'Вопрос'
        verbose_name_plural = 'Вопросы'
  
class Answer(models.Model):
    """Вариант ответа на вопрос"""
    question_id = models.ForeignKey(Question,
                  on_delete=models.CASCADE)
    answer = models.CharField(max_length=200, verbose_name = "Ответ")
    votes = models.IntegerField(verbose_name = "Голосов", default = 0)
 
    def __str__(self):
        return self.answer
 
    class Meta:
        verbose_name = 'Ответ'
        verbose_name_plural = 'Ответы'
inoks
date_hierarchy = ‘date_published’
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB