django admin. dynamische choices

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nawal
User
Beiträge: 3
Registriert: Montag 25. August 2008, 16:15

hallo alle,

ich bin neu in phyton und django und habe folgende frage.

wenn ich in einem model einen foreign-key erstelle in etwa so

Code: Alles auswählen

infile = models.ForeignKey(Infile)
habe ich dadurch einen nette select-box im admin bereich zur zuordnung des foreign-keys.

ich möchte gerne eine select-box die aber nicht einem foreign-key zugrunde liegt.

abbilden könnte man das ganze über CHOICES in etwa so

Code: Alles auswählen

FILE_0 = 0
FILE_1 = 1
FILE_2 = 2
FILE_3 = 3
FILE_CHOICES = (
	(FILE_0, 'Datei wählen:'),
	(FILE_1, 'Datei #1'),
	(FILE_2, 'Datei #2'),
	(FILE_3, 'Datei #3'),
)
das feld im model könnte dann so ausssehen

Code: Alles auswählen

infile = models.PositiveIntegerField(choices=FILE_CHOICES)
funktioniert wunderbar, nur ist FILE_CHOICES recht statisch und hier kommt die frage:
wie kann ich die FILE_CHOICES dynamisch füllen, sprich aus einem anderen model holen, zum beispiel aus:

Code: Alles auswählen

class Infile(models.Model):
	VALID_STATUS = 1
	INVALID_STATUS = 2
	STATUS_CHOICES = (
		(VALID_STATUS, 'Valid'),
		(INVALID_STATUS, 'Invalid'),
	)
	filename = models.CharField(max_length=100)
	editor = models.ForeignKey(User)
	edited_at = models.DateTimeField(default=datetime.datetime.now)
	filepath = models.CharField(max_length=250)
	fileext = models.CharField(max_length=3)
	status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES)
	
	def __unicode__(self):
		return self.filename
da ich gerade schon dabei bin. angenommen ich würde doch ForeignKey nutzen, wie könnte ich erreichen, das nur die einträge die status = valid haben zur auswahl kommen?

noch eine frage: im admin bereich werden alle felder die im model definiert werden als required behandelt. wie kann man ein feld als nicht required kennzeichnen?

vielen dank schonmal im vorraus.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

nawal hat geschrieben:noch eine frage: im admin bereich werden alle felder die im model definiert werden als required behandelt. wie kann man ein feld als nicht required kennzeichnen?
``blank=True, null=True`` auf dem Feld definieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nawal
User
Beiträge: 3
Registriert: Montag 25. August 2008, 16:15

danke für die schnelle hilfe! damit hat sich der rest auch erledigt.
nur eins bleibt noch offen:
wie kann man den ForeignKey so filtern, dass nur die status=valid zur auswhl stehen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mir ist nicht ganz klar, warum man bei einer Relation die Konsistenz riskieren will, indem man die Auswahlliste manuell zusammenstellt, aber um das Admin-UI an dieser Stelle zu ändern, kann man sich z.B. dieses Snippet anschauen. Es zeigt, wie man ein eigenes Widget einbringen kann. Statt des Beispiels mit einem Link, muss es in diesem Fall natürlich eine Auswahlliste mit den Werten sein. Diese kann man zu dem Zeitpunkt dann auch beliebig zusammenstellen.

Oder reicht einfach die Möglichkeit, die Auswahlliste einzuschränken?

Stefan
Antworten