【问题标题】:Getting the foreign key instance within a form_class used in a Django admin inline在 Django 管理内联中使用的 form_class 中获取外键实例
【发布时间】:2011-10-15 13:32:27
【问题描述】:

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

相关代码如下:

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 访问它。但是,这只有在确实有记录时才有效,对吗?因此,如果我使用此表单创建记录,则实例将为 None。

【问题讨论】:

    标签: django django-admin inline-formset


    【解决方案1】:

    试试这个:

    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
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 2017-08-22
      • 2018-04-25
      • 2014-12-03
      • 1970-01-01
      • 2014-11-15
      • 2011-05-22
      • 2013-03-01
      • 2018-10-09
      相关资源
      最近更新 更多