[Django] Anzeige im Admin Interface anpassen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
idioglossiahh
User
Beiträge: 8
Registriert: Donnerstag 25. Oktober 2007, 10:50
Wohnort: Hamburg

Hallo! :)
Folgende Situation:

Mein von Django generiertes Admin Interface soll es verschiedenen Redakteuren erlauben, Artikel online zu bringen.

Ein (vereinfachtes) Artikel-Modell sieht zB so aus:

Code: Alles auswählen

class Artikel(models.Model):
   artikel = models.TextField()
   author = models.ManyToManyField(Author)
Die Author Klasse so:

Code: Alles auswählen

class Author(models.Model):
    STATE_CHOICES = (
        ('a', 'active'),
        ('p', 'passive'),
    )
   name = models.CharField(maxlength=128)
   state = models.CharField(maxlength=1, choices=STATE_CHOICES)
Über die STATE_CHOICEs soll gespeichert werden, ob ein Redakteur aktiv oder passiv ist. Autoren, die seit langem nichts mehr geschrieben haben, sind dann beispielsweise auf "passiv" gestellt.

Wenn man nun die Adminoberfläche zum Schreiben eines Artikels aufruft, so wird automatisch ein Mehrfachauswahl-Menü generiert, über das aus der Menge der in der Datenbank gespeicherten Autoren ein Autorenname ausgewählt werden kann. So weit so gut.

Nun möchte ich aber, dass in diesem Mehrfachauswahl-Menü nicht ALLE Autoren aufgelistet werden, sondern nur diejenigen, deren "state" auf "active" steht. Die passiven Autoren sollen nicht angezeigt werden.

Hat jemand einen Tip? :-)

Gruß,
Nils
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Mal etwas anderes: Warum machst du nicht einfach eine Subklasse von dem normalen Django-Usertyp.

Back to Topic: Dein Problem, dass in der Auflistung nur bestimmte User aufgelistet werden, könnte man dadurch lösen, dass man - wie hier beschrieben - das entsprechende Admintemplate anpasst.

Gruß
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rafael hat geschrieben:Back to Topic: Dein Problem, dass in der Auflistung nur bestimmte User aufgelistet werden, könnte man dadurch lösen, dass man - wie hier beschrieben - das entsprechende Admintemplate anpasst.
Was man nach dem Merge von ``newforms-admin`` nochmal machen darf :(

Ich habe auch einige Templates vom Admin stark verändern müssen, da ich letztendlich nicht so viel Zeit hatte auf den ``newforms-admin`` zu warten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ja sowas ist recht blöd, mit dem newforms-admin wirds aber einfach werden...

Mal schauen wann der gemergt wird, das wär zumindest mal ein nettes Weihnachtsgeschenk (nach nem Duschgutschein türlich XD)
idioglossiahh
User
Beiträge: 8
Registriert: Donnerstag 25. Oktober 2007, 10:50
Wohnort: Hamburg

Hallo!
rafael hat geschrieben:Mal etwas anderes: Warum machst du nicht einfach eine Subklasse von dem normalen Django-Usertyp.
Da ich noch totaler Django/Python Newbie bin, kann ich mit dieser Information leider noch nicht so viel anfangen. :(
rafael hat geschrieben: Back to Topic: Dein Problem, dass in der Auflistung nur bestimmte User aufgelistet werden, könnte man dadurch lösen, dass man - wie hier beschrieben - das entsprechende Admintemplate anpasst.
Gruß
Auf der Seite war ich schonmal, hatte aber wohl dummerweise nicht geschnallt, dass das genau ist, was ich suche. Dennoch hab ich eine Frage dazu. :)

Ich habe wie beschrieben die URLconf erweitert:

Code: Alles auswählen

...
(r'^admin/articles/article/add/$', 'articles.admin_views.add_article'),
...
Mein View sieht so aus:

Code: Alles auswählen

from reviews.models import Article
from reviews.models import Author
from django.template import RequestContext
from django.shortcuts import render_to_response
from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def add_review(request):
    return render_to_response(
        "admin/base_site.html",
        {'book_list' : Review.objects.all(),
         'author_list' : Author.objects.all()},
        RequestContext(request, {}),
    )   
Nun wird natürlich erstmal nur die base_site.html angezeigt. Wie ginge es jetzt weiter?

Müsste ich jetzt in der Zeile

Code: Alles auswählen

'author_list' : Author.objects.all()},
Die Objekte noch so filtern, dass nur aktive Autoren angezeigt werden?

Wie binde ich dann diese gefilterten Autoren in das Standard Template ein, das von Django beim Hinzufügen von Artikeln benutzt wird? Ich hab in django.contrib.admin nach diesem Template gesucht und nix gefunden (Blindheit?).

Ideen? :-)
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

idioglossiahh hat geschrieben:
rafael hat geschrieben:Mal etwas anderes: Warum machst du nicht einfach eine Subklasse von dem normalen Django-Usertyp.
Da ich noch totaler Django/Python Newbie bin, kann ich mit dieser Information leider noch nicht so viel anfangen. :(
Gemeint ist, von dieser Klasse vererben lassen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

apollo13 hat geschrieben:Ja sowas ist recht blöd, mit dem newforms-admin wirds aber einfach werden...

Mal schauen wann der gemergt wird, das wär zumindest mal ein nettes Weihnachtsgeschenk (nach nem Duschgutschein türlich XD)
Ja, das wäre schön, wenn in absehbarer Zeit der newforms admin branch fertig wird... Ich hab in PyLucid deswegen auch nicht viel Zeit damit verschwendet das alte Admin Interface viel anzupassen.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten