Найти - Пользователи
Полная версия: admin.py скрытие полей
Начало » Django » admin.py скрытие полей
1
jokur
Каким образом можно сделать так чтобы поле slug заполнялось автоматически и не отображалось при добавлении объекта через админку.
Александр Кошелев
Хм.. через prepopulated_fields
jokur
Вообще никак не реагирует на него. В админке поле slug отображается жирным цветом как обязательное поле.
Александр Кошелев
jokur
В админке поле slug отображается жирным цветом как обязательное поле.
так для этого надо editable=False ему сделать
jokur
Теперь выдает “Key ‘slug’ not found in Form”. Почему?
Александр Кошелев
Вообще-то сразу надо сказать, что 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)
Но у такого решения тоже есть недостатки.
jokur
Хорошо, при 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.
Александр Кошелев
jokur
у меня в админке поле slug сразу автоматически генерируется, но при одинаковый значениях title оно не делается уникальным, а надо!
Так уж вы разберитесь, как вы хотите slug генерировать, от даты или от заголовка. Так в save и пропишите.
jokur
На сколько я понял метод save вообще для админки не указ. Там вся генерация slug происходит встроенным джаваскриптом. Можно ли как то не прибегая к адаптации этого самого джаваскрипта добиться генерации уникального значения slug через АДМИНКУ?
Александр Кошелев
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.
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