Значение начальной формы модели Django на основе значений БД - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть две модели:

class ReceiptBook(models.Model):
    serial_no = models.IntegerField(unique=True)
    leaf_start = models.IntegerField()
    leaf_end = models.IntegerField()
    issued_person = models.ForeignKey(Person)
    issued_date = models.DateField()
    status = models.CharField(max_length=15,choices=st,default='IS')

class ReceiptLeaf(models.Model):
    receipt_book = models.ForeignKey(ReceiptBook, limit_choices_to={'status': 'IS'})
    receipt_no = models.IntegerField()
    receipt_date = models.DateField()
    received_from = models.CharField(max_length=150)
    kudumba_unit = models.CharField(max_length=20, choices=units)
    amount = models.DecimalField(max_digits=20, decimal_places=2)

В моем интерфейсе администратора я показываю ReceiptLeaf модель с подкладкой ReceiptBook . Теперь я хочу инициализировать значение поля receive_no , используя поле receive_book т.е. используя значение leaf_start и leaf_end с использованием receive_book объекта. У меня есть эта функция на admin.py:

def get_receipt_no(self):
    receipt = ReceiptLeaf.objects.filter(receipt_book=?) #how to get receipt book object here
    no = receipt.receipt_no + 1
    if not no:
      no = receipt.receipt_book.leaf_start
    return no

, который используется formfield_for_dbfield метод:

def formfield_for_dbfield(self, db_field, **kwargs):
    field =  super(ReceiptLeafInline, self).formfield_for_dbfield(db_field, **kwargs)
    if db_field.name == 'receipt_no':
        field.initial = get_receipt_no(self)
    return field

Как передать значение квитанцию ​​ в get_receipt_no () функцию? Поскольку с одним ReceiptBook связано более одного ReceiptLeaf, мне нужен объект receive_book , чтобы правильно инициализировать поле receive_no .

...