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'.