обновить поля модели, имеющей поле профиля ForeignKey - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть 3 типа пользователей: Администратор, Дистрибьютор, Клиент, когда я обновляю информацию о пользователе, созданном администратором, который работает, но когда я вхожу в систему от другого Пользователя, и создал пользователя, который создал, зарегистрированным пользователем, но в этом случае, когда я хочу чтобы обновить информацию этого нового пользователя, я получаю сообщение об ошибке Скажите мне, что не имеет профиля. Помогите мне, пожалуйста введите описание изображения здесь

**views.py **
@login_required(login_url="/account/login/")
def edit_distributor(request,id=None):
    instance = get_object_or_404(Distributor, id=id)

    distributor_form = Distributorform(data=request.POST, instance=instance)




    if request.method == "POST":
        if  distributor_form.is_valid():
            # add_balance = distributor_form.cleaned_data.get('add_solde'):


            distributor = distributor_form.save(commit=False)
            distributor.created_by = request.user
            distributor.balance = distributor.balance + 10





            distributor_form.save()




            return redirect('all_distriubtor')



        else:
            messages.error(request, "Error", extra_tags='alert')
            return redirect('edit_distriubtor', id)

    else:

        distributor_form = Distributorform(instance=instance)





    return render(request,"UsersManager/edit_distributor.html",{ "instance":instance,

                                                                 "distributor_form":distributor_form,

                                                                 })

**models.py**
    class Profile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    phone = models.CharField(max_length=100)
    newpassword = models.CharField(blank=True,max_length=100)
    codePin = 
    models.CharField(blank=True,max_length=150,unique=False,default="")
    is_customer = models.BooleanField(default=False)
    is_Distributor = models.BooleanField(default=False)


    def __str__(self):
        return self.user.first_name





@receiver(post_save, sender=User)
def user_is_created(sender,instance,created,**kwargs):
    if created:
        Profile.objects.create(user=instance)
    else:
        instance.profile.save()

класс Заказчик (моделей. Модель):

balance = models.DecimalField(max_digits=12,decimal_places=2)
created_by = models.ForeignKey(User,on_delete=models.CASCADE,blank=True)
profile = models.ForeignKey(Profile,on_delete=models.CASCADE,blank=True)
created = models.DateField(null=True,blank=True)
updated = models.DateTimeField(null=True, blank=True)

def save(self):
    if not self.id:
        self.created = datetime.date.today()
    self.updated = datetime.datetime.today()
    super(Customer,self).save()

modles.py

class Distributor(models.Model):

    balance = models.DecimalField(max_digits=12,decimal_places=2)
    created_by = models.ForeignKey(User,on_delete=models.CASCADE,blank=True)
    profile = models.ForeignKey(Profile,on_delete=models.CASCADE,blank=True)
    created = models.DateField(null=True, blank=True)
    updated = models.DateTimeField(null=True, blank=True)

    def save(self):
        if not self.id:
            self.created = datetime.date.today()
        self.updated = datetime.datetime.today()
        super(Distributor, self).save()
...