Kis*_*n M 4 python django django-signals
我有两个Profile模型Company
模型.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()
Run Code Online (Sandbox Code Playgroud)
如您所见,Profile这是一个 user_model 扩展。当我只发送一个实例时,我已经做到了这一点。
模型.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)
Run Code Online (Sandbox Code Playgroud)
Company创建成功。我想 在创建公司时将该name字段保存到CompanyThe中。Profile
视图.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)
Run Code Online (Sandbox Code Playgroud)
根据您的模型架构,以下应该是基于信号的方法的代码。
@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()
Run Code Online (Sandbox Code Playgroud)