__init __ () a un argument de mot clé inattendu 'user'
je suis à l'aide de Django pour créer un utilisateur et un objet lorsque l'utilisateur est créé. Mais il y a une erreur
__init__() got an unexpected keyword argument 'user'
lors de l'appel de la register()
fonction dans view.py.
La fonction est:
def register(request):
'''signup view'''
if request.method=="POST":
form=RegisterForm(request.POST)
if form.is_valid():
username=form.cleaned_data["username"]
email=form.cleaned_data["email"]
password=form.cleaned_data["password"]
user=User.objects.create_user(username, email, password)
user.save()
return HttpResponseRedirect('/keenhome/accounts/login/')
else:
form = RegisterForm()
return render_to_response("polls/register.html", {'form':form}, context_instance=RequestContext(request))
#This is used for reinputting if failed to register
else:
form = RegisterForm()
return render_to_response("polls/register.html", {'form':form}, context_instance=RequestContext(request))
et la classe de l'objet est:
class LivingRoom(models.Model):
'''Living Room object'''
user = models.OneToOneField(User)
def __init__(self, temp=65):
self.temp=temp
TURN_ON_OFF = (
('ON', 'On'),
('OFF', 'Off'),
)
TEMP = (
('HIGH', 'High'),
('MEDIUM', 'Medium'),
('LOW', 'Low'),
)
on_off = models.CharField(max_length=2, choices=TURN_ON_OFF)
temp = models.CharField(max_length=2, choices=TEMP)
#signal function: if a user is created, add control livingroom to the user
def create_control_livingroom(sender, instance, created, **kwargs):
if created:
LivingRoom.objects.create(user=instance)
post_save.connect(create_control_livingroom, sender=User)
Le Django page d'erreur informe les informations d'erreur:
user=User.objects.create_user(username, email, password)
et
LivingRoom.objects.create(user=instance)
J'ai essayé de chercher ce problème, en trouvant certains cas, mais ne peut toujours pas trouver comment le résoudre.
source d'informationauteur noben
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire
parce que vous avez une méthode init qui ne se prend PAS
user
comme argument.Vous voulez quelque chose comme
J'ai eu le même message d'erreur.
Sur mon point de vue, j'ai été primordial get_form_kwargs() comme ceci:
Mais dans mon formulaire je n'ai pas réussi à remplacer la init() la méthode. Une fois que je l'ai fait. Problème résolu
LivingRoom.objects.create()
appelsLivingRoom.__init__()
- comme vous l'avez peut-être remarqué si vous aviez lu le traceback - transmettant les mêmes arguments. Pour rendre une longue histoire courte, un Djangomodels.Model
sous-classe de l'initialiseur est mieux de le laisser seul, ou devrions accepter *args et **kwargs correspondant au modèle de méta-champs. La bonne façon de fournir des valeurs par défaut pour les champs, dans le champ constructeur à l'aide de ladefault
mot-clé comme expliqué dans la FineManual.