抑制django信号

时间:2018-06-11 05:08:57

标签: python django signals

我一直在努力解决这个问题几个星期了,看来,我无法让它发挥作用。

当您在我的网站上注册时,您可以创建用户配置文件和公司。然后,您可以向公司添加成员,但信号每次都会触发并创建空公司。如何阻止django这样做?

model.py

class Companyname(models.Model):
company_name = models.CharField(max_length=100, default = '', null=True, blank=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
description = models.TextField(max_length=10000, default = '', null=True, blank=True)

def __str__(self):
    return self.company_name 

@receiver(post_save, sender=User)
def update_user_company(sender, instance, created, **kwargs):
    if created:
        Companyname.objects.create(user=instance)
        if instance.companyname.company_name is '':
            print("just print this")
        else:
            instance.companyname.save()

公司存储在userprofile上

class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
description = models.CharField(max_length=100, default = '', null=True, blank=True)
company = models.ForeignKey(Companyname, null=True, on_delete=models.CASCADE)
role = models.ForeignKey(Role, null=True, on_delete=models.CASCADE)
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
company_admin = models.BooleanField(default=False)

add_user view.py

def add_user(request):
if request.method == 'POST':
    form = AddUserForm(request.POST)
    if form.is_valid():
        company = request.user.userprofile.company_id

        form.save()
        user = form.save()

        user.refresh_from_db()

        user.userprofile.company_id = company
        user.userprofile.role = form.cleaned_data.get('role')
        user.is_active = False
        user.save()

注册view.py

def register(request):
if request.method == 'POST':
    form = RegistrationForm(request.POST)
    if form.is_valid():
        user = form.save()
        user.refresh_from_db()  # load the profile instance created by the signal
        user.userprofile.description = form.cleaned_data.get('description')
        user.companyname.company_name = form.cleaned_data.get('company_name')
        user.userprofile.company_id = user.companyname.id
        user.save()
        raw_password = form.cleaned_data.get('password1')
        user = authenticate(username=user.username, password=raw_password)

        login(request, user)
        return redirect('/account/my_product')
else:
    form = RegistrationForm()
return render(request, 'accounts/reg_form.html', {'form': form})

希望有人可以帮忙:)

0 个答案:

没有答案