simple django django-reversion

simple - django-reversion y modelo relacionado



django simple history (2)

Tengo los siguientes modelos.py

class Contact(models.Model): pass class Link(models.Model): pass class Relationship(models.Model): # Documentation __doc__ = _(u''Stores a relationship between 2 contacts.'') # Attributes from_contact = models.ForeignKey(Contact, related_name=''from_contacts'', verbose_name=_(u''first contact''), help_text=_(u''The first contact implicated by the relationship.'')) link = models.ForeignKey(Link, related_name=u''relationships'', verbose_name=_(u''relationship link''), help_text=_(u''The relationship link between both contacts.'')) to_contact = models.ForeignKey(Contact, related_name=''to_contacts'', verbose_name=_(u''second contact''), help_text=_(u''The second contact implicated by the relationship.'')) # Meta-data class Meta: verbose_name = u''Relationship'' verbose_name_plural = u''Relationships'' unique_together = (''from_contact'', ''link'', ''to_contact'')

Usando la vista basada en clase de Django y el Revision Context Manager , puedo crear una revisión en cualquier momento que cree una nueva relación entre 2 contactos

# part of my views.py class RelationshipCreateView(LoginRequiredMixin, CreateView): template_name = u''frontend/relationships/relationship-create.html'' model = Relationship form_class = RelationshipForm def get_success_url(self): return reverse_lazy(''contact-detail'', kwargs={''contact_pk'': self.kwargs[''contact_pk'']}) def form_valid(self, form): contact = Contact.objects.get(pk=self.kwargs[''contact_pk'']) link = form.cleaned_data[''link''] other = form.cleaned_data[''other''] inverse = form.cleaned_data[''inverse_relationship''] relationship = None if not inverse: relationship = Relationship( from_contact=contact, link=link, to_contact=other ) else: relationship = Relationship( from_contact=other, link=link, to_contact=contact ) with reversion.create_revision(): relationship.save() reversion.set_comment(_(u''A relationship has been added between %(from)s and %(to)s'' % {''from'': relationship.from_contact, ''to'': relationship.to_contact})) return HttpResponseRedirect(self.get_success_url())

Pero solo uno de los contactos obtiene la revisión (el primero) y el comentario que viene con ella. ¿Cómo se puede usar el Revision Context Manager para crear ambas revisiones?


Probablemente un poco tarde, pero creo que con una versión reciente de reversión puedes seguir las relaciones:

Añade esta línea al final de tu modelo:

reversion.register(Relationship, follow=[''from_contact'', ''link'', ''to_contact''])


Django Model Utils es la nueva y mejor manera de realizar un seguimiento de los cambios en modelos y campos de modelos, así como hacer muchas otras cosas realmente interesantes.