J'ai récemment effectué une mise à niveau de Django-CMS 2.3.5 vers 2.4.1.
Auparavant, j'avais un modèle comme celui-ci :
from django.db import models
from cms.models.pagemodel import Page
class MyModel(models.Model):
my_page = models.ForeignKey(Page)
Dans l'administration, cela me permettrait de choisir une page à associer avec MyModel
.
Maintenant que j'ai effectué la mise à jour et que j'ai cliqué sur "publier le brouillon" pour toutes mes pages, la même page d'administration affiche deux copies de chaque page dans sa boîte de sélection - une publiée et une brouillon.
Quelques enquête supplémentaire a découvert que le plugin teaser a ajouté ce qui suit dans sa définition pour traiter ce problème :
page_link = models.ForeignKey(Page,
limit_choices_to={'publisher_is_draft': True},
...)
De même, j'avais l'habitude de pouvoir rechercher les URL des pages dans mes vues comme ceci :
Page.objects.get(reverse_id='update').get_absolute_url()
Mais maintenant je dois utiliser :
Page.objects.get(reverse_id='update', publisher_is_draft=False).get_absolute_url()
Cela semble un peu laid.
Est-ce que les limit_choices_to
et le champ supplémentaire dans le get
maintenant nécessaire ? Ou existe-t-il un moyen plus propre de ne voir que les pages publiées ? (par exemple, j'ai remarqué que d'autres plugins cms, par exemple link, picture, utilisent des clés étrangères sans une balise limit_choices_to
argument.)