LINUX.ORG.RU

Django models default


0

2

почему в Django нет возможность прицепить callback функцию в качестве значения default при описании модели, для того чтобы не ходить на костылях с сигналами create/update

как бы хорошо, если сразу при описании модели задать какие то вычисления для default того ForeignKey(User|Site

или может быть я чего то ещё не дочитал?

★★★

Последнее исправление: fMad (всего исправлений: 1)

или может быть я чего то ещё не дочитал?

Это очень мягко сказано.

А если нужен доступ к другим полям, вместо сигналов можно расширить save.

anonymous
()
class Category(models.Model):
    name=models.CharField(max_length=255, verbose_name=u'Название')
    order=models.IntegerField(default=lambda:Category.objects.all().aggregate(Max('order'))['order__max']+1, blank=True, verbose_name=u'Сортировка')
    parent=models.ForeignKey('self', blank=True, null=True, default=None, related_name='child')

Не то? Правда в данном случае если категорий не будет, то вывалится ошибка

susist
()
Ответ на: комментарий от susist

нет не то, ну самое простое, моделька страницы жёстко и скрыто связанна с доменом и юзером

решение через жуткие костыли через переопределение create и какие непонятно зачем нужные сущности менеджеров

даже вполне вроде бы логичное site = models.ForeignKey(Site, verbose_name='сайт', default=settings.SITE_ID)

рушит всю идиллию

fMad ★★★
() автор топика
Ответ на: комментарий от susist

ну, получить settings.SITE_ID легко, к тому же это не всегда доступно, но всё равно остаётся необходимость делать exclude в admin, потому что остаётся возможность выбора Site, хотя по логике этого вопроса быть не должно, создал страничку, а она автоматом привязалась к домену и так же прозрачно с выборками

тоже самое с User, создал страничку, привязанную к домену и со своим id и не думаешь о том, что её кто-то другой прочитает или поправит и тем тем более о присвоение своей страничке своего же id

fMad ★★★
() автор топика
Ответ на: комментарий от susist

ну понятно что можно, просто как то уж сильно напрягает

для того чтобы сделать банальное прозрачной ограничение прав на контент

нужно: 1. переопределить метод create модели

2. написать менеджеры

3. переопределить админку

4. учитывать везде в шаблонах

5. куча неведомой фигни, не относящейся к логике приложения ни капли

и всё это в контексте всего пиара джанги на тему легкости освоения, разработки, расширения и прочего. по сути остаётся лишь узкая тропка туда ку не надо, либо хуки через хаки

fMad ★★★
() автор топика
Последнее исправление: fMad (всего исправлений: 1)
Ответ на: комментарий от fMad

Это ещё что! Чтобы сделать кнопку «Сделать всё заебись» надо столько всего, ты себе не представляешь...

Написать вью на основе TemplateView, потом его добавить в urls, потом сверстать саму кнопку, и я ещё молчу про кучу неведомой фигни, не относящейся к логике кнопки. И главное логики-то тьфу — всего лишь сделать всё заебись.

Нет, чтобы настройку ENABLE_PERFECT_BUTTON в конфиге сделать! Какие же ленивые программисты в джанге сидят.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.