Django 创建新对象时,如何更新外键上的字段?
我对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
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):
...
你应该小心处理
您仍然需要担心并发请求产生的预订量会超过您可以处理的数量。您应该使用 您仍然需要担心并发请求会产生比可以处理的更多的保留