Как увеличить поле "число" для каждого владельца (ForeignKey) в Django - PullRequest
0 голосов
/ 17 июня 2020

Вот моя модель, я хочу иметь номер для каждого адреса каждого владельца. У владельца может быть несколько адресов

Как владелец A может иметь адрес 1 адрес 2 .. также владелец B: адрес 1 адрес 2 ..

class Address(TimeStamp):
    number = models.IntegerField(default=0, null=False)
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE, related_name='owner_address')

def save(self, *args, **kwargs):
    if self.pk:
        for owner in self.owner:
            self.number += 1
    return super(DeliveryAddress, self).save(*args, **kwargs)

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Учитывая, что вы хотите просто сохранить последовательный порядок адресов одного владельца, вы можете думать об этом так. Вы можете извлечь записи адресов для одного владельца и подсчитать их количество. При создании новой записи адреса возьмите этот счетчик, добавьте к нему 1, и у вас будет следующий номер. Примерно так,

current_address_count = Address.objects.filter(owner=<some-owner>).count()
Address.objects.create(number=current_address_count+1, owner)
0 голосов
/ 17 июня 2020

Вы можете сделать что-то вроде этого.

def save(self, *args, **kwargs):
    obj = super().save(*args, **kwargs)
    obj.number = obj.owner.owner_address.count()
    obj.save()
    return obj

Думаю, нам не нужно увеличивать счетчик, поскольку адрес уже добавлен в базу данных.

...