在Django管理内联中使用的form_类中获取外键实例

在Django管理内联中使用的form_类中获取外键实例,django,django-admin,inline-formset,Django,Django Admin,Inline Formset,我有一个使用自定义表单类的管理内联。如何从该表单类的函数中访问父实例(外键) 相关代码如下: 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,

我有一个使用自定义表单类的管理内联。如何从该表单类的函数中访问父实例(外键)

相关代码如下:

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
我知道一旦有了一个实际的实例,我就可以使用
instance.bar
访问它。然而,这只在有记录的情况下有效,对吗?因此,如果我使用此表单创建记录,实例将为无。

尝试一下:

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
希望这能帮到你