Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2008 20:45:16

jokur
От:
Зарегистрирован: 2008-11-09
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Каким образом можно сделать так чтобы поле slug заполнялось автоматически и не отображалось при добавлении объекта через админку.



Офлайн

#2 Ноя. 9, 2008 21:04:16

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Хм.. через prepopulated_fields



Офлайн

#3 Ноя. 9, 2008 21:53:00

jokur
От:
Зарегистрирован: 2008-11-09
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Вообще никак не реагирует на него. В админке поле slug отображается жирным цветом как обязательное поле.



Офлайн

#4 Ноя. 9, 2008 21:57:24

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

admin.py скрытие полей

jokur
В админке поле slug отображается жирным цветом как обязательное поле.
так для этого надо editable=False ему сделать



Офлайн

#5 Ноя. 9, 2008 23:30:44

jokur
От:
Зарегистрирован: 2008-11-09
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Теперь выдает “Key ‘slug’ not found in Form”. Почему?



Офлайн

#6 Ноя. 10, 2008 00:28:08

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Вообще-то сразу надо сказать, что prepopulated_fields не очень дружит с русскими тайтлами. Но суть не в этом.

Если их использовать, то да, поле на форме быть должно, но надо его пометить как blank=True, тогда оно станет необязательным. Соответственно, при обработке формы в slug попадет профильтрованное значение из поля которое вы задали. editable=True совсем говорит форме не использовать это поле, на что она в последствии ругается, т.к. не может его найти.

Я бы советовал, наверно, вообще отказаться от этой возможно и реализовать руками, используя пакет pytils. Всё локигу можно в методе save модели разместить. Например:

def save(self, *args, **kwargs):
from pytils import slugify

self.slug = slugify(self.title)

super(MyModel, self).save(*args, **kwargs)
Но у такого решения тоже есть недостатки.



Офлайн

#7 Ноя. 12, 2008 22:34:21

jokur
От:
Зарегистрирован: 2008-11-09
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

admin.py скрытие полей

Хорошо, при editable = True и prepopulated_fields = ‘date’(date = models.DateTimeField(auto_now_add=True)) у меня в админке поле slug сразу автоматически генерируется, но при одинаковый значениях title оно не делается уникальным, а надо! Как мне такое можно реализовать?
У меня прописан метод save в моей модели для генерации уникального slug и даже поле slug имеет параметр unique_for_date='date'. Но все равно всем записям имеющим одинаковый заголовок присваивается не уникальный slug.

P.S. Для генерации slug использую пакет pytils.



Офлайн

#8 Ноя. 13, 2008 13:16:21

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

admin.py скрытие полей

jokur
у меня в админке поле slug сразу автоматически генерируется, но при одинаковый значениях title оно не делается уникальным, а надо!
Так уж вы разберитесь, как вы хотите slug генерировать, от даты или от заголовка. Так в save и пропишите.



Офлайн

#9 Ноя. 13, 2008 17:25:54

jokur
От:
Зарегистрирован: 2008-11-09
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

admin.py скрытие полей

На сколько я понял метод save вообще для админки не указ. Там вся генерация slug происходит встроенным джаваскриптом. Можно ли как то не прибегая к адаптации этого самого джаваскрипта добиться генерации уникального значения slug через АДМИНКУ?



Офлайн

#10 Ноя. 13, 2008 18:11:50

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

admin.py скрытие полей

jokur
На сколько я понял метод save вообще для админки не указ.
Нет.

Любой код который хочет сохранить объект модели так или иначе вызывает save(). И админка в том числе.

Вы же этот код использовали?
def save(self, *args, **kwargs):
from pytils import slugify

self.slug = slugify(self.title)

super(MyModel, self).save(*args, **kwargs)
Судя по описанию проблемы - да. Вот тут и добавьте дату к заголовку, чтобы на основе них и герерировался slug.

Но в таком случае лучше просто отказаться от уникальности slug и сделать индекс на slug+date.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version