Bonjour,

Je suis débutant sur django et bute sur un problème d'héritage entre models que j'aimerais mettre en place.
Voici mes modèles:

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
26
27
28
29
30
31
 
class Interaction(models.Model):
    nom = models.CharField(max_length=128, unique=True)
    lieu = models.ForeignKey(Lieu, on_delete=models.CASCADE, blank=True, null=True)
    description = models.TextField(default='...')
    acces_libre = models.BooleanField(default=True)
 
 
class Heros(Interaction):
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True,null=True)
 
    #############   Attributs   ##########
    corps = models.IntegerField(default=0)
    coeur = models.IntegerField(default=0)
    esprit = models.IntegerField(default=0)
 
 
    def __str__(self):
        return self.nom
 
 
class Personnage(Interaction):
 
    # Attributs  
    corps = models.IntegerField(default=50)
    coeur = models.IntegerField(default=50)
    esprit = models.IntegerField(default=50)
 
 
    def __str__(self):
        return self.nom
Et voici le résultat de ma migration:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
 
migrations.CreateModel(
            name='Interaction',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nom', models.CharField(max_length=128, unique=True)),
                ('description', models.TextField(default='...')),
                ('acces_libre', models.BooleanField(default=True)),
            ],
        ),
 
migrations.CreateModel(
            name='Heros',
            fields=[
                ('interaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='aventures.Interaction')),
                ('corps', models.IntegerField(default=0)),
                ('coeur', models.IntegerField(default=0)),
                ('esprit', models.IntegerField(default=0)),
                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            bases=('aventures.interaction',),
        ),
 
migrations.CreateModel(
            name='Personnage',
            fields=[
                ('interaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='aventures.Interaction')),
                ('corps', models.IntegerField(default=50)),
                ('coeur', models.IntegerField(default=50)),
                ('esprit', models.IntegerField(default=50)),
            ],
            bases=('aventures.interaction',),
        ),
migrations.AddField(
            model_name='interaction',
            name='lieu',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='aventures.Lieu'),
        ),
Il me semble que tout est correct et que le lien par clé étrangère se fait bien... cependant lorsque je souhaite créer une instance de héros sur l'interface admin, j'obtiens:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
no such column: aventures_heros.interaction_ptr_id
Lorsque je souhaite créer une instance Personnage:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
no such table: aventures_personnage
J'ai vidé mon dossier migration, supprimer toutes les instances d'avant mon changement dans les modèles, rien ne change...

Auriez-vous une idée?

Merci à vous.
Niko