Conflit d'attribut - Django

Conflit entre deux classes reliées par un OneToOne qui possedent un attribut id automatique

a marqué ce sujet comme résolu.

Bonjour,

Je suis débutant avec django, et dans la programmation en général, et j’aimerai créer un relation OneToOne entre deux tables. Je m’explique : mon site sera, à terme, une banque d’application visant à aider les entraineurs de basket à coacher. La page d’accueil sera composée d’un flux dans lequel on pourra retrouver un article décrivant chaque programme récément paru. J’ai donc créé une classe Program dans laquelle je stocke les infos de mes programmes (ou applis), et une classe Article dans laquelle je stocke les infos de mes articles. J’ai créé une relation OneToOne entre Article et Program, mais lorsque je tente de créer ma migrations, j’obtient l’erreur suivante :

django.core.exceptions.FieldError: Local field 'id' in class 'Article' clashes with field of the same name from base class 'Program'.

Je comprends plus ou moins l’erreur mais je ne voit pas du tout comment la résoudre. Merci de votre aide !!

voici le code de mon models.py :

#Coding:utf-8
from django.db import models
 
class Program (models.Model):
    name = models.CharField(max_length = 100)
    description = models.TextField()
    created_at = models.DateTimeField (auto_now = False, auto_now_add=True)
    updated_at = models.DateTimeField (auto_now = True, auto_now_add=False)
    images = models.ImageField (upload_to = 'images', null=True)
    download_files = models.FileField (upload_to = 'executables', null=True)
     
    def __str__(self):
        return self.name
 
 
class Article (models.Model):
    program_ref = models.OneToOneField (Program, on_delete = models.CASCADE)
    nom = models.CharField (max_length = 100, default = program_ref.name)
                             
                             
class Paragraphe (models.Model):
    article_ref = models.ForeignKey (Article, on_delete = models.CASCADE)
    content = models.TextField ()

et voici le code complet de l’erreur :

D:\Users\Robin\Desktop\SimpleTrainer\SimpleTrainer>manage.py makemigrations
Traceback (most recent call last):
  File "D:\Users\Robin\Desktop\SimpleTrainer\SimpleTrainer\manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\core\management\commands\makemigrations.py", line 170, in handle
    migration_name=self.migration_name,
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\autodetector.py", line 44, in changes
    changes = self._detect_changes(convert_apps, graph)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\autodetector.py", line 128, in _detect_changes
    self.old_apps = self.from_state.concrete_apps
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\state.py", line 214, in concrete_apps
    self.apps = StateApps(self.real_apps, self.models, ignore_swappable=True)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\state.py", line 271, in __init__
    self.render_multiple(list(models.values()) + self.real_models)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\state.py", line 306, in render_multiple
    model.render(self)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\migrations\state.py", line 574, in render
    return type(self.name, bases, body)
  File "D:\Users\Robin\Desktop\SimpleTrainer\environnement_django\lib\site-packages\django\db\models\base.py", line 208, in __new__
    base.__name__,
django.core.exceptions.FieldError: Local field 'id' in class 'Article' clashes with field of the same name from base class 'Program'.
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte