Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

On ne gère pas les demandes de mise en avant associées à des contenus supprimés #6625

Closed
Situphen opened this issue Jul 16, 2024 · 1 comment
Labels
S-BUG Corrige un problème

Comments

@Situphen
Copy link
Member

Situphen commented Jul 16, 2024

Les demandes de mises en avant sont représentées par l'objet FeaturedRequested qui peut faire référence à différents objets (contenu, sujet du forum...) grâce à la table l'infrastructure des types de contenus. Au lieu d'utiliser seulement un champ models.ForeignKey classique, on utilise un champ virtuel GenericForeignKey qui combine un champ models.ForeignKey pour stocker le type de contenu et un champ models.PositiveIntegerField pour stocker l'objet :

content_type = models.ForeignKey(ContentType, verbose_name=_("Type de l'objet"), on_delete=models.CASCADE)
object_id = models.PositiveIntegerField(db_index=True, verbose_name=_("Id de l'objet"))
content_object = GenericForeignKey("content_type", "object_id")

Lorsqu'on supprime un objet en base de données, les conséquences sur les autres objets sont généralement gérés par Django (via l'attribut on_delete sur les champs). Ce n'est pas le cas avec l'infrastructure des types de contenus. Dans notre cas, si un des objets (contenu, sujet du forum...) est supprimé, l'objet FeaturedRequested n'est pas supprimé en base de données et son champ content_object renvoie simplement None. Il faut donc prendre en compte que ce champ peut être nul dans notre code.

Ce n'est pas le cas dans le code de la vue FeaturedRequestedList qui correspond à l'URL /mise-en-avant/unes/requetes/ car cette ligne renvoie une AttributeError lorsque content_object est nul pour l'un des objets :

return [q for q in queryset.all() if isinstance(q.content_object, Topic) or not q.content_object.is_obsolete]

À noter qu'il est possible (probable ?) que ce soucis soient présent ailleurs dans le code aussi !


Pour reproduire :

  1. (n'importe quel utilisateur) aller sur un contenu publié et cliquer sur "proposer la mise en une" dans la barre latérale
  2. (un staff) dépublier le contenu
  3. (l'auteur) enlever les éventuels autres auteurs et supprimer le contenu
@Situphen Situphen added the S-BUG Corrige un problème label Jul 16, 2024
@philippemilink philippemilink moved this from À trier to À traiter in Suivi des tickets Jul 17, 2024
@philippemilink
Copy link
Member

Corrigé avec #6626

@github-project-automation github-project-automation bot moved this from À traiter to Clos in Suivi des tickets Jul 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-BUG Corrige un problème
Projects
Status: Clos
Development

No branches or pull requests

2 participants