Обновлять поле модели при создании из другого экземпляра модели, связанного с ForeignKey

#django #django-models

#django #django-модели

Вопрос:

Я запустил приложение car fleet и создал несколько моделей в файле, связанном с моделями, я создал иерархию моделей, в которой сверху у меня есть марка автомобиля, ниже модели автомобилей, связанные с ForeignKey, для каждой марки и ForeignKey для каждого идентификатора автомобиля, который в конечном итоге составляет инвентарь автомобилей, который называется «class CarPool», в этоммодель, у меня есть значение «car_sale_status = модели.BooleanField(default = False)», чего я хотел бы добиться, так это того, что каждый раз, когда я создаю экземпляр из связанного внешнего ключа продавца, он автоматически обновляется «car_sale_status = models.BooleanField(по умолчанию = False)» в True

Пожалуйста, посоветуйте

Спасибо

 class CarPool(models.Model):

    # Relationship Fields
    car_inventory = models.ForeignKey(
        'cardealer.CarTypes',
        on_delete=models.CASCADE, related_name="carpools", 
    )
    car_id = models.CharField(max_length=30,default="")
    car_location = GeopositionField()
    car_sale_status = models.BooleanField(default=False)


    YEAR_CHOICES = []


    for r in range(1980, (datetime.datetime.now().year 1)):
        YEAR_CHOICES.append((r,r))


    year_manufacture = models.IntegerField(('year_manufacture'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)


    def __str__(self):
        return self.car_id

    def __unicode__(self):
        return self.car_inventory

class CustomerBuyer(models.Model):

    buyer_car_buy = models.ForeignKey(
        'cardealer.CarPool',
        on_delete=models.CASCADE, related_name="customer_buyer",default='0'
    )
    buyer_private_name = models.CharField(max_length=80,default='')
    buyer_family_name = models.CharField(max_length=80,default='')
    buyer_private_id = models.IntegerField(default=0)
    transaction_date = models.DateTimeField(default=datetime.datetime.now())
    transaction_amount = models.IntegerField(default=0)




    def __str__(self):
        return self.buyer_private_name   ' '  self.buyer_family_name

    def __unicode__(self):
        return self.buyer_private_name   ' '  self.buyer_family_name
  

Ответ №1:

если я вас правильно понял, просто разверните метод «сохранить»

 class CustomerBuyer(models.Model):

    buyer_car_buy = models.ForeignKey(
        'cardealer.CarPool',
        on_delete=models.CASCADE, related_name="customer_buyer",default='0'
    )
    buyer_private_name = models.CharField(max_length=80,default='')
    buyer_family_name = models.CharField(max_length=80,default='')
    buyer_private_id = models.IntegerField(default=0)
    transaction_date = models.DateTimeField(default=datetime.datetime.now())
    transaction_amount = models.IntegerField(default=0)

    def __str__(self):
        return self.buyer_private_name   ' '  self.buyer_family_name

    def __unicode__(self):
        return self.buyer_private_name   ' '  self.buyer_family_name

    def save(self, *arg, **kwargs):
        super(CustomerBuyer, self).save(*args, **kwargs)
        self.buyer_car_buy.car_sale_status = True
        self.buyer_car_buy.save()