Clave externa Django-CMS en páginas que muestran páginas publicadas y de borrador

Recientemente he actualizado de Django-CMS 2.3.5 a 2.4.1.

Anteriormente tuve un modelo así:

from django.db import models
from cms.models.pagemodel import Page

class MyModel(models.Model):
    my_page = models.ForeignKey(Page)

En el administrador, esto me permitiría elegir una página para asociarla con MyModel.

Ahora que actualicé y revisé y presioné “publicar borrador” en todas mis páginas, la misma página de administración muestra dos copias de cada página en su cuadro de selección: una publicada y una borrador.

Algunos further investigation han descubierto que el complemento teaser ha agregado lo siguiente en su definición para hacer frente a esto:

    page_link = models.ForeignKey(Page,
        limit_choices_to={'publisher_is_draft': True},
        ...)

De forma similar, solía poder buscar las URL de las páginas en mis vistas de la siguiente manera:

Page.objects.get(reverse_id='update').get_absolute_url()

Pero ahora tengo que usar:

Page.objects.get(reverse_id='update', publisher_is_draft=False).get_absolute_url()

Esto parece un poco feo.

¿Son necesarios los limit_choices_to y el campo adicional en la obtención ahora? ¿O hay una manera más limpia de ver solo las páginas publicadas? (por ejemplo, me doy cuenta de que otros complementos de cms, por ejemplo, enlace, imagen, utilizan claves foráneas sin un argumento limit_choices_to).

Mejor respuesta
Para un mejor manejo de las claves externas a las páginas cms, debe usar PageField en lugar de ForeignKey

https://django-cms.readthedocs.org/en/2.4.3/extending_cms/fields.html

from django.db import models
from cms.models.fields import PageField

class MyModel(models.Model):
    my_page = PageField()

Cuando desee obtener url para una página por su reverse_id, debe usar lo siguiente

Page.objects.public().get(reverse_id='update').get_absolute_url()

Por favor indique la dirección original:Clave externa Django-CMS en páginas que muestran páginas publicadas y de borrador - Código de registro