开发者

Getting the foreign key instance within a form_class used in a Django admin inline

开发者 https://www.devze.com 2023-03-23 12:45 出处:网络
I have an admin inline that uses a custom form class. How can I access the parent instance (foreign key) from within the functions of that form class?

I have an admin inline that uses a custom form class. How can I access the parent instance (foreign key) from within the functions of that form class?

Relevant code below:

models.py:

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

class Foo(models.Model):
    name = models.CharField(max_length=50)
    bar = mode开发者_JAVA技巧ls.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

I know that once there is an actual instance, I can access it using instance.bar. However, that only works once there's acually a record, right? So if I am using this form to create a record, instance is going to be None.


Give this a try:

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

Hope that helps you out.

0

精彩评论

暂无评论...
验证码 换一张
取 消