es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

`django_comments_xtd` compartido por múltiples modelos de clases.

Tengo un sitio de blog Django+Wagtail integrado con django_comments_xtd como se muestra a continuación:
“`
class PostDetail(Page):

class Comment(XtdComment):
page = models.ForeignKey('PostDetail', on_delete=models.CASCADE)

<pre><code>def save(self, *args, **kwargs):
if self.user:
self.user_name = self.user.username
self.page = PostDetail.objects.get(pk=self.object_pk)
super(Comment, self).save(*args, **kwargs)
</code></pre>

“`
Ahora estoy a punto de crear otro modelo de clase class SurveyPoll(Page):,

¿Cómo puedo aplicar el mismo Comment al modelo recién creado? ¿Debería crear otro modelo de comentario?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para aplicar el mismo Comentario al modelo recién creado SurveyPoll, puedes heredar del modelo Comentario y establecer la clave foránea page para que apunte al modelo SurveyPoll en lugar del modelo PostDetail.

    En otras palabras, no necesitas crear otro modelo de comentario. Simplemente puedes modificar el modelo existente Comentario para que funcione también con el modelo SurveyPoll. Aquí tienes un ejemplo de cómo podrías hacerlo:

    class SurveyPoll(Page):
        ...
    
    class Comment(XtdComment):
        page = models.ForeignKey(Page, on_delete=models.CASCADE)
    
        def save(self, *args, **kwargs):
            if self.user:
                self.user_name = self.user.username
            if isinstance(self.page, PostDetail):
                self.page = PostDetail.objects.get(pk=self.object_pk)
            elif isinstance(self.page, SurveyPoll):
                self.page = SurveyPoll.objects.get(pk=self.object_pk)
            super(Comment, self).save(*args, **kwargs)
    

    En este modelo de Comentario modificado, la clave foránea page ahora es una clave foránea genérica que apunta a cualquier instancia de Page. Luego verificamos el tipo de la instancia page y la establecemos en el modelo correspondiente antes de llamar a super().save().

    De esta manera, puedes utilizar el mismo modelo Comentario tanto para los modelos PostDetail como para los modelos SurveyPoll.

Comments are closed.