Je veux modéliser un article avec des révisions de Django:Comment modéliser une façon unique à une relation dans Django
Je suit dans models.py de mon article:
class Article(models.Model):
title = models.CharField(blank=False, max_length=80)
slug = models.SlugField(max_length=80)
def __unicode__(self):
return self.title
class ArticleRevision(models.Model):
article = models.ForeignKey(Article)
revision_nr = models.PositiveSmallIntegerField(blank=True, null=True)
body = models.TextField(blank=False)
Sur la modèle artlcle Je veux avoir 2 références directes à une révision - une référence à une révision publiée et une autre à une révision en cours d'édition. Cependant, d'après ce que je comprends, les références OneToOne et ForeignKey génèrent une référence arrière de l'autre côté de la référence du modèle, donc ma question est, comment puis-je créer une référence unidirectionnelle one-to-one dans Django?
Y at-il une incantation spéciale pour cela ou dois-je simuler en incluant l'état dans la révision et les implémentations personnalisées des champs qui demandent une révision dans un état spécifique?
Editer: Je suppose que j'ai fait un travail assez médiocre pour expliquer mon intention. Essayons à un niveau d'abstraction supérieur:
Mon intention initiale était de mettre en œuvre une sorte de modèle d'article révisé, où chaque article peut avoir plusieurs révisions, où une de ces révisions peut être "publiée" et une révisée activement.
Cela signifie que l'article aura un à-plusieurs à des révisions (représentés par ForeignKey(Article)
référence dans ArticleRevision classe) et deux références d'une façon de l'article à la révision: published_revision
et .
Ma question est principalement comment puis-je modéliser cela avec l'ORM de Django?
Pas vraiment une réponse, mais il existe déjà quelques solutions pour la gestion des versions des modèles Django, par ex. django-reversion (http://code.google.com/p/django-reversion) ou AuditTrail (http://code.djangoproject.com/wiki/AuditTrail).Peut-être que l'un d'entre eux correspond à vos besoins et vous n'avez pas besoin de réinventer la roue :-) –
Je ne veux pas de versionnage automatique de mes modèles (c'est ce que font ces deux modèles). Ce que je cherche, c'est plus d'une révision "manuelle", où une révision d'article est un article jusqu'à ce qu'il soit publié. Toute modification apportée à un article publié crée une nouvelle révision. La publication de la nouvelle révision verrouillera cette révision et la configurera comme révision publiée et l'édition suivante sur l'article répétera le cycle d'édition-publication (je crois personnellement que c'est beaucoup plus gérable pour les utilisateurs réguliers que "chaque édition est une révision "approche". –