IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Formset, clef étrangère et OneToOne - Enregistrement en base de données [Python 3.X]


Sujet :

Django Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Formset, clef étrangère et OneToOne - Enregistrement en base de données
    Bonjour à tous,
    je me mets tranquillement à Django et je fais face à mes premières difficultés.
    Je veux créer un formulaire de création de compte sans utiliser d'app externe mais je n'arrive pas à créer de nouveaux comptes.
    Voici mon modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class UserProfile(models.Model):
        user = models.OneToOneField(User)
        avatar = models.ImageField(null=True, blank=True, upload_to='avatar/')
        website = models.URLField(null=True, blank=True)
        birthday = models.DateField()
        country = CountryField()
     
        GENDER_CHOICES = (
            ('M', 'Male'),
            ('F', 'Female'),
        )
        gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
     
        def __str__(self):
            return "UserProfile(models)"
     
     
    class UserLanguage(models.Model):
        user = models.ForeignKey(User)
        language = models.CharField(max_length=7, choices=LANGUAGES)
        level = models.CharField(max_length=1)
        # http:// questions/3201018/django-language-codes
     
        def __str__(self):
            return "UserLanguage(models)"
    Voila mon fichier forms.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class RegisterForm(forms.ModelForm):
        class Meta:
            model = User
            fields = ('username', 'password',)
            exclude = ('last_login',)
            widgets = {'password': forms.PasswordInput(), }
     
     
    UserProfileFormSet = inlineformset_factory(User, UserProfile, can_delete=False)
    UserLanguageFormSet = inlineformset_factory(User, UserLanguage, can_delete=False, extra=1)
    Et enfin mon views.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def registration(request):
        if request.method == "POST":
            user = RegisterForm(request.POST)
            user_profile = UserProfileFormSet(request.POST)
            user_language = UserLanguageFormSet(request.POST)
     
            if user.is_valid() and user_profile.is_valid() and user_language.is_valid():
                u = user.save()
     
                user_profile.user = u
                user_profile.save()
     
                user_language.user = u
                user_language.save()
     
        else:
            user = RegisterForm()
            user_profile = UserProfileFormSet()
            user_language = UserLanguageFormSet()
     
        return render(request, 'user/registration.html', locals())
    J'obtiens l'erreur suivante :
    Column 'user_id' cannot be null
    Je ne vois malheureusement pas pourquoi l'enregistrement ne se fait pas.
    Si vous avez des remarques je suis preneur.
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A vue de nez, je dirais que le champ "user_id", c'est le numéro de l'enregistrement qui sert de clé primaire dans la base de données d'enregistrement des profils, dans une table nommée "users", a priori.

    Généralement, il devrait être du type INT / BIGINT avec les propriétés AUTOINCREMENT, NOT NULL et PRIMARY KEY.

    Peut-être que de jeter un oeil de ce côté-là permettrait de lever le problème ?

    @+.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Oui c'est tout à fait ça.
    Le problème étant que l'utilisateur est bien ajouté (user) mais pas user_language ni user_profile.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Oyabi Voir le message
    Oui c'est tout à fait ça.
    Le problème étant que l'utilisateur est bien ajouté (user) mais pas user_language ni user_profile.
    Ok, ce doit être un problème de foreign key genre user_language.user_id = user.user_id ou un truc dans ce goût-là.

    Vous devez certainement relier la fiche de user_language au numéro d'enregistrement de la fiche user.

    Idem pour l'autre fiche, user_profile.

    Donc, vérifiez si vous avez des champs type foreign key (user_id ?) dans les tables user_language et user_profile puis assignez-leur la valeur de user.user_id dans votre code pour que les fiches puissent être créées correctement.

    @+.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    J'ai résolu mon problème, pour les intéressés : http://stackoverflow.com/questions/2...?noredirect=1#

    Merci à toi tarball69.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/07/2007, 20h58
  2. [MySQL] Enregistrement en base de données
    Par salirose dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/09/2006, 01h42
  3. Insérer Enregistrement dans Base de données
    Par TurricanII dans le forum JBuilder
    Réponses: 3
    Dernier message: 30/05/2006, 13h59
  4. nbre enregistrements dans base de données
    Par Chonchon dans le forum JDBC
    Réponses: 3
    Dernier message: 09/01/2006, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo