Найти - Пользователи
Полная версия: Дефолтное значение поля модели в зависимости от других записей.
Начало » Django » Дефолтное значение поля модели в зависимости от других записей.
1
fth
Есть код:
class Something(Model):
...
order_field = PositiveSmallIntegerField()

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

Как быть в такой ситуации и возможно ли это вообще реализовать?
Это нужно только для админки, так что какое-нибудь решение через admin.py тоже подойдёт.
appetito
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)
...
как-то так
fth
Так я же написал, что “а в вызываемом объекте классом Somethnig воспользоваться не получается.”
Если мы создадим функцию до объявления, то не сможем воспользоваться классом Something, ибо он не объявлен, если после, то сама функция ещё не объявлена, в отдельный файл тоже не получится, ибо будет ругаться из-за перекрёстного импорта.
appetito
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)
fth
Хм… Действительно работает, что-то я не так тогда писал видимо.
В любом случае, спасибо!
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