5

DjangoAdminの表形式のインライン内の外部キーのフィールドにアクセスしようとしています。

私の最善の努力にもかかわらず、私はそれを機能させることができないようです。私の現在のコードは次のとおりです。

class RankingInline(admin.TabularInline):
    model = BestBuy.products.through
    fields = ('product', 'account_type', 'rank')
    readonly_fields = ('product', 'rank')
    ordering = ('rank',)
    extra = 0

    def account_type(self, obj):
        return obj.products.account_type

その結果:

'RankingInline.fields' refers to field 'account_type' that is missing from the form.

また、model__fieldメソッドを使用してみました。これは次のように使用しました。

fields = ('product', 'product__account_type', 'rank')

その結果:

'RankingInline.fields' refers to field 'product__account_type' that is missing from the form.

モデルは次のように定義されます。

class Product(BaseModel):  
    account_type = models.CharField(choices=ACCOUNT_TYPE_OPTIONS, verbose_name='Account Type', max_length=1, default='P')

class Ranking(models.Model):
    product = models.ForeignKey(Product)
    bestbuy = models.ForeignKey(BestBuy)
    rank = models.IntegerField(null=True, blank = True)

class BestBuy(BaseModel):
    products = models.ManyToManyField(Product, through='Ranking')

class BaseModel(models.Model):
    title = models.CharField(max_length = TODO_LENGTH)
    slug = models.CharField(max_length = TODO_LENGTH, help_text = """The slug is a url encoded version of your title and is used to create the web address""")

    created_date = models.DateTimeField(auto_now_add = True)
    last_updated = models.DateTimeField(auto_now = True)

私は何が間違っているのですか?

4

3 に答える 3

6

「Product」をRankingInline内でインラインとして展開したいので、探しているのはネストされたインラインだと思います。現在、Djangoにはそのような機能が組み込まれていません。この質問は関連しています:Django管理者にネストされたインライン?

DjangoDOCの「多対多の中間モデルの操作」セクションも参照できます。それは役に立つかもしれません。

実際、Djangoは、インライン製品フィールドエントリのほかに小さな緑色の「+」ボタンを表示します。これを使用して、BestBuyの現在のエントリに割り当てる新しい製品を作成できます。これはあなたが使用するための代替手段かもしれません。

于 2012-11-13T22:51:26.463 に答える
0

新しいフィールドは、(つまり、 RankingInline)ではなく(つまり、RankingAdmin)account_typeで定義する必要があります。TabularInlineからのみアクセスする必要があります。ModelAdminTabularInline

于 2012-11-13T08:15:48.557 に答える
0

メソッドフィールドをreadonly_fieldsに追加するだけです。

readonly_fields = ('product', 'rank', 'account_type')
于 2014-01-28T18:38:48.213 に答える