临时用同一个模型中的模型字段初始化 Django 模型字段

时间:2021-03-16 03:15:20

标签: python django

我正在 Django 2.1 中构建旅行预订应用程序,但在更新汽车中的可用座位以进行旅行时遇到了一些问题。您的帮助将不胜感激)

在下面,我有我的第一个模型,我试图在第一次创建模型时使用 available_seats 初始化 seats。首先,我尝试了以下方法

class Trip(models.Model):
    origin = models.CharField(max_length=120)
    destination = models.CharField(max_length=120) 
    time_date = models.DateTimeField(auto_now=True)
    arrival_time = models.DateTimeField()
    trip_cost = models.IntegerField()
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
    seats = models.IntegerField()
    available_seats = models.IntegerField(default=seats)


是的,此方法不起作用,因为无法将变量分配给尚未定义的变量。因此,我提出了一些解决方案,我需要重写模型的 save() 方法或使用信号来完成我想要的。所以,我做到了:

class Trip(models.Model):
    origin = models.CharField(max_length=120)
    destination = models.CharField(max_length=120) 
    time_date = models.DateTimeField(auto_now=True)
    arrival_time = models.DateTimeField()
    trip_cost = models.IntegerField()
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
    seats = models.IntegerField()
    available_seats = models.IntegerField()



    #rewriting save() method
    # def save(self, created=False, *args, **kwargs):
    #     if created:
    #         self.available_seats = self.seats
    #         super().save(*args, **kwargs)


#using signals
@receiver(pre_save, sender=Trip)
def default_available_seats(sender, instance=Trip, created, **kwargs):
    if created:
    instance.available_seats = instance.seats


这两种方式将设置我的 Trip.available_seats = seats,但问题是现在我的 available_seats 始终相关并依赖于我的 seats。我无法单独更新值 available_seats,每当我更新 seats 可用座位会自动更改,但我不想要它。我希望 available_seats 在创建旅行模型时具有 seats 值。因为一旦有人预订了座位,available_seats 就会发生变化。

我怎样才能实现我想要做的事情? 寻求您的操作帮助) 提前致谢!

0 个答案:

没有答案