【发布时间】:2016-09-19 01:10:55
【问题描述】:
我想在模型的 .save() 方法期间根据用户输入创建其他对象。信息存储在多对多关系.available_specs 中。
我的代码有效,如果一个人按两次保存,但不是第一次。此处的 cmets 中也描述了该问题Django foreign key access in save() function。
这是我的工作:
def save(self, *args, **kwargs):
my_save_result = super().save(*args, **kwargs) #save first to create an id
self.refresh_from_db() #just as a test, did not help at all
#the following line is the problem:
# in the first save, available_specs.all() returns []
# when I re-open the model and save again, I get the correct list
for spec in self.available_specs.all():
VehicleSpec.objects.get_or_create(vehicle=self, spec=spec)
return my_save_result
我正在使用 Python 3.5 和 Django 1.9
编辑:
我尝试使用以下代码使用post_save() 信号(并删除了覆盖的保存()方法):
@receiver(post_save, sender=VehicleModel)
def create_dependent_vehicle_specs(sender, **kwargs):
vehicle = kwargs['instance']
#in the first save-process I get an empty list here,
#after I hit save again, the code works.
print(vehicle, vehicle.available_specs.all())
for spec in vehicle.available_specs.all():
VehicleSpec.objects.get_or_create(vehicle=vehicle, spec=spec)
Edit2: m2m_changed 成功了:
@receiver(m2m_changed, sender=VehicleModel)
def create_dependent_vehicle_specs(sender, **kwargs):
vehicle = kwargs['instance']
for spec in vehicle.available_specs.all():
VehicleSpec.objects.get_or_create(vehicle=vehicle, spec=spec)
m2m_changed.connect(create_dependent_vehicle_specs, sender=VehicleModel.available_specs.through) # @UndefinedVariable
顺便说一句:这里有一个相关问题:Django accessing ManyToMany fields from post_save signal
【问题讨论】:
-
您是否尝试在
post_save信号中这样做? -
我刚试了一下,效果一样
标签: python django python-3.x django-models