8 Stimmen

Anpassen der Auswahl im Django-Admin

Ich habe ein Modell, ein Feld davon ist ein ForeignKey, so dass ich sehen, wählen Sie in Django Admin, ist es möglich, Etiketten dieses Select anpassen?

class Model(models.Model):
    name = models.CharField()
    def __unicode__(self):
         return self.name

class Part(models.Model):
    name = models.CharField()
    parent =  model.ForeignKey(Model)
    def __unicode__(self):
         return self.name
    def name_with_model(self):
         return self.name + ' ' + parent.name

class SmallPart(models.Model):
    name = models.CharField()
    parent =  model.ForeignKey(Part)

Wenn ich ein neues SmallPart hinzufüge, sehe ich das Select-Tag mit den Namen der Teile, ich muss name_with_model sehen

12voto

dting Punkte 37410

Wenn Sie die Feldbezeichnung meinen:

mit dem Code von: Django Admin - Überschreiben des Widgets eines benutzerdefinierten Formularfeldes

# forms.py

from django import forms
from django.contrib import admin

class ProductAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProductAdminForm, self).__init__(*args, **kwargs)
        self.fields['tags'].label = 'Custom Label'

In Ihrem ModelAdmin-Objekt geben Sie dann das Formular an:

from django.contrib import admin
from models import Product
from forms import ProductAdminForm

class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm

admin.site.register(Product, ProductAdmin)

Wenn Sie die Bezeichnungen in der Dropdown-Liste meinen:

Überschreiben Sie das Widget wie in der obigen Antwort.

éditer :

Das Standardformularfeld für ein fk-Feld ist ein Modellauswahlfeld. Vom docs

Les Unicode m wird aufgerufen, um eine String Repräsentationen der Objekte zur Verwendung in den Auswahlen des Feldes zu erzeugen; um angepasste ModelChoiceField und überschreiben Sie label_from_instance. Diese Methode wird ein Model-Objekt erhalten und sollte eine Zeichenkette zurückgeben, die zur repräsentieren. Zum Beispiel:

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.name_with_model()

und dann:

class SmallPartAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(SmallPartAdminForm, self).__init__(*args, **kwargs)
        self.fields['parent'] = MyModelChoiceField(queryset=Part.objects.all())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X