Django 创建新对象时,如何更新外键上的字段?

Django 创建新对象时,如何更新外键上的字段?,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我对Django很陌生,我对一个模型有问题 class RestaurantAvailability(models.Model): """RestaurantAvailability Model""" DayTime = models.DateTimeField() restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE) availability = models.IntegerFi

我对Django很陌生,我对一个模型有问题

class RestaurantAvailability(models.Model):
    """RestaurantAvailability Model"""
    DayTime = models.DateTimeField()
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
    availability = models.IntegerField(null=True)

    def __str__(self):
        """What to show when we output an object as a string."""
        restaurant = self.restaurant.name
        time = self.DayTime
        return restaurant + " " + str(time)


class Reservation(models.Model):
    """Reservation Model"""
    name=models.CharField(max_length=100)
    email=models.CharField(max_length=100)
    note=models.CharField(max_length=100)
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
    restaurantAvailability = models.ForeignKey(RestaurantAvailability, on_delete=models.CASCADE)

    def __str__(self):
        """What to show when we output an object as a string."""
        person = self.name
        place = self.restaurant.name
        time = self.restaurantAvailability.DayTime
        return person + "  " + place + " " + str(time)

    def save(self, *args, **kwargs):
        """decrement resturant avalability by 1 on create"""
        if not self.pk:
            print('|||||||||||||||||||||||||||||||||||||||||')
            print(self.restaurantAvailability.availability)
            print('|||||||||||||||||||||||||||||||||||||||||')
            self.restaurantAvailability.availability -= 1 #  decrement resturant avalability by 1 on create
            print(self.restaurantAvailability.availability)
        super(Reservation, self).save(*args, **kwargs)
当我创建一个新的预订时,我想将餐厅的可用性降低1。save方法正在运行,因为我成功地创建了一个新的预订,我甚至在减量后打印出正确的可用性。但是当我去管理面板查看RestaurantAvailability时,我没有看到可用性有任何变化。就好像没有保存可用性一样


我的问题是,在创建新对象时,如何更新外键上的字段?

更改后,需要保存可用性。请注意
self.restaurantAvailability.save()
行。您还可以执行
update
语句,而不是调用
.save()
或将该逻辑移动到信号

def save(self, *args, **kwargs):
        """decrement resturant avalability by 1 on create"""
        if not self.pk:
            print('|||||||||||||||||||||||||||||||||||||||||')
            print(self.restaurantAvailability.availability)
            print('|||||||||||||||||||||||||||||||||||||||||')
            self.restaurantAvailability.availability -= 1 #  decrement resturant avalability by 1 on create
            self.restaurantAvailability.save()
            print(self.restaurantAvailability.availability)
额外:可能值得一试,这样您就不会遇到并发请求的问题

from django.db import models, transaction


@transaction.atomic
def save(self, *args, **kwargs):
    ...

您需要在更改可用性后保存它。请注意
self.restaurantAvailability.save()
行。您还可以执行
update
语句,而不是调用
.save()
或将该逻辑移动到信号

def save(self, *args, **kwargs):
        """decrement resturant avalability by 1 on create"""
        if not self.pk:
            print('|||||||||||||||||||||||||||||||||||||||||')
            print(self.restaurantAvailability.availability)
            print('|||||||||||||||||||||||||||||||||||||||||')
            self.restaurantAvailability.availability -= 1 #  decrement resturant avalability by 1 on create
            self.restaurantAvailability.save()
            print(self.restaurantAvailability.availability)
额外:可能值得一试,这样您就不会遇到并发请求的问题

from django.db import models, transaction


@transaction.atomic
def save(self, *args, **kwargs):
    ...

你应该小心处理


您仍然需要担心并发请求产生的预订量会超过您可以处理的数量。

您应该使用

您仍然需要担心并发请求会产生比可以处理的更多的保留