0

管理サイトの ModelAdmin オブジェクトの TabularInline インラインでフォームセットを上書きするのに問題があります。TabularInline オブジェクトに関連付けられたモデルが必要であることはわかっていますが、フォームセットの生成に使用されるフォーム オブジェクトでこれを指定する方法がわかりません。以下のコードでは、「'AppAssetInline.formset' は BaseModelFormSet から継承されていません。」

class AppAssetForm(forms.ModelForm):

    model = App.assets.through
    primary = forms.BooleanField()
    uuid = forms.CharField()

class AppAssetInline(admin.TabularInline):
    model = App.assets.through
    AssetFormset = formset_factory(AppAssetForm)
    formset = AssetFormset


class AppAdmin(admin.ModelAdmin):

    inlines = [AppAssetInline,]
4

2 に答える 2

1

私の質問への答えは、フォームをどのように構築したかということではなく、モデルのフィールドをどのように結合したかということでした。モデルには次の構造がありました。

class App(models.Model):

    package = models.FileField(upload_to=settings.APP_PACKAGE_ROOT)
    assets = models.ManyToManyField('AppAsset', blank=True, null=True)
    download_count = models.IntegerField(default=0)

class AppAsset(models.Model):

    def __unicode__(self):
        return self.asset_file.name

    notes = models.CharField(max_length=255, null=True, blank=True)
    type = models.CharField(max_length=255, null=True, blank=True)
    asset_file = models.FileField(upload_to=settings.APP_PACKAGE_ROOT)

私がしたことは、AppAsset がそのアセットの App に外部キーを持つように構造を変更することでした。その後、AppAsset モデルで TabularInline を問題なく使用できました。最新のソース ファイルは次のとおりです。

https://github.com/ridecharge/spout/blob/master/Spout/AppDistribution/models.py https://github.com/ridecharge/spout/blob/master/Spout/AppDistribution/admin.py

于 2013-10-22T15:23:54.483 に答える
0

django.forms.models.inlineformset_factory代わりに使用する必要がありますformset_factory

于 2013-10-18T16:59:48.323 に答える