Das Problem
Ich habe zwei viele zu viele Felder (disciplines
, subjects
) in Excerpt
Modell zeigt, und ich möchte in Admin-Seite zeigen, nur die subjects
innerhalb disciplines
die corresponde.Filter ein ManyToManyField in django Admin-Seite
Beispiel
DISCIPLINE | SUBJECT
portugues | article
portugues | verbs
portugues | nons
math | numbers
math | equations
DISCIPLINE = math
DISCIPLINE | SUBJECT
math | numbers
math | equations
Wie ich
Dafür verwende ich die Funktion formfield_for_manytomany
innerhalb Admin teilweise gelöst, es die Objekte zum Filtern, gut funktioniert, aber ich kann nicht herausfinden, wie zu filtern die subject
Objekte auf dem choosed discipline
basiert,
Was habe ich versucht,
ich versucht, einen Funkt Ion in model.py get_disciplines
für die Rückgabe der entsprechenden ID, für dann die Themen zu filtern, aber dieser Ansatz scheint nicht in meinem Admin-Proxy-Modell zu funktionieren, weil ein Fehler global name 'get_disciplines' is not defined
wahrscheinlich cuz ich kann außerhalb von model.py zugreifen. Ich versuchte auch, diese Methode in Admin-Proxy zu deklarieren, aber funktioniert auch nicht.
meinen Code
# model.py
class Discipline(models.Model):
id = models.CharField(max_length=15, primary_key=True)
name = models.CharField(max_length=100)
class Subject(models.Model):
id = models.CharField(max_length=15, primary_key=True)
name = models.CharField(max_length=100)
disciplines = models.ManyToManyField(Discipline)
class Excerpt(models.Model):
discipline = models.ManyToManyField(Discipline)
subjects = models.ManyToManyField(Subject)
# my idea
def get_disciplines(self):
e = self.discipline.first()
return e.id
# admin.py
class ExcerptTaggerAdmin(ImageCroppingMixin, admin.ModelAdmin):
filter_horizontal = ('subjects','discipline')
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "subjects":
kwargs["queryset"] = Subject.objects.filter(disciplines = get_discipline)
return super(ExcerptTaggerAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
class ExcerptTagger(Excerpt):
class Meta:
proxy = True
Ich bin kein Profi in django, so denke ich, kann für jemand einfach sein, die mehr Erfahrung, ich hoffe, dass Sie mir helfen können