ich habe folgende models.pydjango-Reversion und verwandte Modell
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')
Mit klassenbasierte Ansicht von Django und die Revision Context Manager
, ich Revision jederzeit erstellen können, erstelle ich eine neue Beziehung zwischen zwei Kontakten
# 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())
Aber nur einer der Kontakte bekommt die Revision (die erste) und der Kommentar kommt damit. Wie kann Revision Context Manager
verwendet werden, um beide Revisionen zu erstellen?
Versuchen Sie, in einer Schleife eine Liste ['from', 'to'] mit umgekehrter Beziehung beim zweiten Mal. – jcs
Sie sprechen davon, beide Kontakte zu speichern? – TonyEight
Ich weiß, dass dieses Problem alt ist, aber hast du das jemals gelöst? Sind Sie [registrieren die ausländischen Schlüssel zu folgen] (http://django-reversion.readthedocs.org/en/latest/api.html#advanced-model-registration)? – tutuDajuju