Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Дефолтное значение поля модели в зависимости от других записей. [RSS Feed]

#1 Март 13, 2011 13:38:35

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Дефолтное значение поля модели в зависимости от других записей.

Есть код:

class Something(Model):
...
order_field = PositiveSmallIntegerField()

class Meta:
ordering = ['display_order']
Необходимо, что бы значением по умолчанию было Somethnig.objects.reverse().all() + 1 (проще говоря самое большое значение плюс один), но понятно, что deafult = self.objects.reverse().all() написать нельзя, а в вызываемом объекте классом Somethnig воспользоваться не получается.

Как быть в такой ситуации и возможно ли это вообще реализовать?
Это нужно только для админки, так что какое-нибудь решение через admin.py тоже подойдёт.



Офлайн

#2 Март 13, 2011 14:59:15

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Дефолтное значение поля модели в зависимости от других записей.

fth
но понятно, что deafult = self.objects.reverse().all() написать нельзя…
http://docs.djangoproject.com/en/1.2/ref/models/fields/#django.db.models.Field.default

тут пишут что default может быть функцией(callable)


def next_order():
return Something.objects.aggregate( max_order = Max('order_field'))['max_order'] + 1

...
...
order_field = PositiveSmallIntegerField(default = next_order)
...
как-то так



Отредактировано (Март 13, 2011 15:20:06)

Офлайн

#3 Март 13, 2011 16:24:55

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Дефолтное значение поля модели в зависимости от других записей.

Так я же написал, что “а в вызываемом объекте классом Somethnig воспользоваться не получается.”
Если мы создадим функцию до объявления, то не сможем воспользоваться классом Something, ибо он не объявлен, если после, то сама функция ещё не объявлена, в отдельный файл тоже не получится, ибо будет ругаться из-за перекрёстного импорта.



Офлайн

#4 Март 13, 2011 17:03:45

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Дефолтное значение поля модели в зависимости от других записей.

fth
Так я же написал, что “а в вызываемом объекте классом Somethnig воспользоваться не получается.”
Если мы создадим функцию до объявления, то не сможем воспользоваться классом Something, ибо он не объявлен, если после, то сама функция ещё не объявлена, в отдельный файл тоже не получится, ибо будет ругаться из-за перекрёстного импорта.
не поленился и проверил - рабочий код:
from django.db import models


def next_order():
max = Test.objects.aggregate(max=models.Max('order'))['max']
if max:
return max+1
return 1

class Test(models.Model):
order = models.IntegerField(default=next_order)



Офлайн

#5 Март 13, 2011 17:40:50

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Дефолтное значение поля модели в зависимости от других записей.

Хм… Действительно работает, что-то я не так тогда писал видимо.
В любом случае, спасибо!



Офлайн

  • Начало
  • » Django
  • » Дефолтное значение поля модели в зависимости от других записей.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version