![](/img/trans.png)
[英]Django - Multiple post_save signals after create despite dispatch_uid
[英]Django signals How to perform post_save method with multiple senders and multiple instances?
我有兩個模型Profile
和Company
models.py
class Profile(models.Model):
user = models.OneToOneField(User)
company = models.ForeignKey('company.Company', null=True)
phone = models.CharField(max_length=10, blank=True)
@receiver(post_save, sender=User)
@receiver(post_save, sender=Company)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
Profile.objects.create(company=instance)
instance.profile.save()
如您所見, Profile
是一個user_model擴展。 我只發送一個實例就可以正常工作。
models.py
class Company(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=10, blank=True, unique=True)
phone = models.CharField(max_length=10, blank=True)
Company
創建成功。 我要保存的name
在外地Company
來的Profile
創建公司時。
views.py
def form_valid(self, form):
company = form.save(commit=False)
user = self.request.user
name=form.cleaned_data['name']
phone=form.cleaned_data['phone']
company.name = name
company.phone = phone
company.user = user
company.save()
Profile.refresh_from_db()
Profile.company = name
Profile.save()
return super(CompanyCreateView, self).form_valid(form)
根據您的模型架構,以下應該是基於信號的方法的代碼。
@receiver(post_save, sender=User)
@receiver(post_save, sender=Company)
def update_user_profile(sender, instance, created, **kwargs):
if created:
if sender.__name__ == 'User':
Profile.objects.create(user=instance)
# Company
else:
profile = Profile.objects.get(user=instance.user)
profile.company = instance
profile.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.