/ / Uzyskiwanie instancji klucza obcego w klasie form_test używanej w administratorze Django inline - django, django-admin, inline-formset

Uzyskiwanie instancji klucza obcego w klasie form_test używanej w administratorze Django inline - django, django-admin, inline-formset

Mam admin inline, który używa niestandardowej klasy formularza. Jak uzyskać dostęp do instancji nadrzędnej (klucza obcego) z funkcji tej klasy formularza?

Odpowiedni kod poniżej:

models.py:

class Bar(models.Model):
name = models.CharField(max_length=50)

class Foo(models.Model):
name = models.CharField(max_length=50)
bar = models.ForeignKey(Bar, null=True, blank=True, related_name="foos")

admin.py:

class FooInlineAdmin(admin.TabularInline):
model = Foo
form = AdminFooForm
max_num = 3

class Bar(admin.ModelAdmin):
inlines = [FooInlineAdmin]

forms.py:

class AdminFooForm(forms.ModelForm):
class Meta:
model = Foo

def clean(self):
data = self.cleaned_data
mybar = self.get_foreign_key_somehow() # this is the line I"m interested in

Wiem, że gdy istnieje rzeczywiste wystąpienie, mogę uzyskać do niego dostęp za pomocą instance.bar. Jednak działa to tylko wtedy, gdy jest to akurat rekord, prawda? Jeśli więc używam tego formularza do utworzenia rekordu, wystąpienie będzie miało wartość None.

Odpowiedzi:

1 dla odpowiedzi № 1

Wypróbuj to:

class FooInlineFormset(forms.models.BaseInlineFormSet):
def clean(self):
for form in self.forms:
try:
if form.cleaned_data:
delete = form.cleaned_data.get("DELETE")
if not delete:
bar = form.cleaned_data.get("bar", None)
except AttributeError:
pass

class FooInlineAdmin(admin.TabularInline):
model = Foo
formset = FooInlineFormset
form = AdminFooForm
max_num = 3

Mam nadzieję, że ci pomaga.