Frage

Ich baue eine App Django zu lernen und haben mit einem Kontaktsystem gestartet, dass zur Zeit speichert Kontakte und Adressen. C ist ein viele zu viele Beziehung mit A ist, sondern eher als die Verwendung von Django models.ManyToManyField() Ich habe meine eigenen Link-Tabelle mit zusätzlichen Informationen über den Link erstellt, wie was der Adresstyp ist mit dem diesem Kontakt (zu Hause, Arbeit usw.). Was ich versuche, diese Informationen zu einer Ansicht zu tun ist, übergeben, so in meiner vollen Ansicht eines Kontakts kann ich dies tun:

def contact_view_full(request, contact_id):
    c = get_object_or_404(Contact, id=contact_id)

    a = []
    links = ContactAddressLink.objects.filter(ContactID=c.id)    
    for link in links:
        b = Address.objects.get(id=link.AddressID_id)
        a.append(b)

    return render_to_response('contact_full.html', {'contact_item': c, 'addresses' : a }, context_instance=RequestContext(request))

Und damit ich das Äquivalent von c.Addresses.all() tun können, oder aber die ManyToManyField funktioniert. Was mir zu wissen, interessiert ist, wie kann ich Informationen über den Link in dem link Objekt mit den 'addresses' : a Informationen umkippen, so dass, wenn meine Vorlage tut dies:

{% for address in addresses %}
<!-- ... -->
{% endfor %}

und assoziiert richtig die richtigen Link Objektdaten mit der Adresse.

Also, was ist der beste Weg, dies zu erreichen? Ich denke, eine Vereinigung von zwei Objekten könnte eine Idee sein, aber ich habe nicht genug Erfahrung mit Django zu wissen, ob das der beste Weg, es zu tun betrachtet wird. Vorschläge?

Vielen Dank im Voraus.

Nf

War es hilfreich?

Lösung

Um zusätzliche Informationen hinzuzufügen, sollten Sie eine ManyToMany Beziehung mit einem ‚Trog‘ Extra-Feld verwenden: http: / /docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

Das zu diesem Code führen wird:

def contact_view_full(request, contact_id):
    c = get_object_or_404(Contact, id=contact_id)
    a = c.addresses.all()
    return render_to_response('contact_full.html', {'contact_item': c, 'addresses' : a }, context_instance=RequestContext(request))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top