Hice algunos campos personalizados en mi modelo de usuario de django, lo que estaba tratando de hacer es ofrecerle al usuario que configure su perfil enviando esos campos. Aunque mi modelo personalizado funciona bien, ya que puedo editarlos o agregarlos. campos en mi modo de sitio de administración.
Pero cuando intento enviar ese formulario como usuario, aparece un error como este:
Exception Type: IntegrityError Exception Value: UNIQUE constraint failed: blog_profile.user_idmis modelos.py :-
class Profile(models.Model): user = models.OneToOneField(User,unique=True,on_delete=models.CASCADE,default=1) bio = models.TextField(max_length=500,null=True,blank=True) location = models.CharField(max_length=30,null=True,blank=True) birth_date = models.DateField(null=True,blank=True) pic=models.FileField(default='/user.png',null=True,blank=True) @receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) @receiver(post_save, sender=User) def save_user_profile(sender, instance, **kwargs): instance.profile.save()formularios.py :-
class ProfileForm(forms.ModelForm): class Meta: model=Profile fields = ['bio','location','birth_date','pic']vistas.py:-
def set(request): if request.user.is_authenticated(): if request.method == 'POST': form=ProfileForm(request.POST,request.FILES) if form.is_valid(): item=form.save(commit=False) item.pic=request.FILES['pic'] item.save() return redirect('/blog') else: return HttpResponse('Invalid') else: form=ProfileForm() return render(request,'blog/set.html',{'form':form})Mi plantilla para el conjunto es : -
{% extends 'blog/base.html' %} {%block body%} <div class="container"> <div class="row">{{hell}} <div class="col-md-6 col-md-offset-3"> <div class="alert alert-success" role="alert"><strong>Well Done!</strong> {{user.username}} You Have Succesfully Registered!</div> </div> </div> <form method="POST" enctype="multipart/form-data">{% csrf_token %} {{form.as_p}} <input type="submit" value="Edit"> </form> </div> {%endblock%}Este es mi intento, por favor ayúdenme, soy nuevo en todo esto, gracias de antemano.
En primer lugar, no creo que deba proporcionar un valor predeterminado para el campo Usuario, ya que es OneToOneField, y especificar un valor predeterminado anula todo el propósito.
En segundo lugar, creo que el problema está en las señales de guardado posteriores, ya que ha especificado dos señales y una podría entrar en conflicto con la otra. Yo, de alguna manera, no puedo entender el propósito del segundo controlador de señal (save_user_profile). ¿Puedes quitar esto y probar?
Lo más probable es que ya tenga un perfil con esa identificación de usuario en la base de datos. Porque la relación es uno a uno. Un perfil solo puede tener uno y solo un usuario. Cuando guarde el formulario, si el perfil ya existe, debe actualizarlo en lugar de crearlo.