2

Tastypie を使用して、関連するレコード ID (外部キー参照) の値を返すように最善を尽くしています。デフォルトでは、外部キーは結果から除外されます。

次のモデルがあります。

class Category(models.Model):
    """Finance category"""
    class Meta:
        db_table = 'category'
    parent = models.ForeignKey('self')
    name = models.CharField(max_length=32)
    TYPES = (
        ('outcome', 'outcome'),
        ('income', 'income'),
    )
    type = models.CharField(max_length=7,choices=TYPES)
    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()
    created_by = models.ForeignKey(User, db_column='created_by', related_name='createdCategories')
    updated_by = models.ForeignKey(User, db_column='updated_by', related_name='updatedCategories')

ここには 2 つの関係があります。parent再帰関係です (カテゴリ ツリー テーブルです)。created_byユーザーとの関係です。API は次の値を返します: * id * name * created_at * updated_at * type * resource_uri

Tastypieがparent(_id)またはcreated_by(または任意の外部キー)を返すようにするにはどうすればよいですか?

以下は、別のOSの質問から試したものです。

class IncomeCategoryResource(ModelResource):
    parent_id = models.IntegerField(attribute="parent_id")
    class Meta:
        queryset = Category.objects.filter(type='income')

残念ながら、API 全体が失敗します。

__init__() got an unexpected keyword argument 'attribute'

attributeまた、 kwarg をに置き換えようとしましたdb_column。これは単に無視されます。

お願い助けて :)

4

1 に答える 1

4

まず、IntegerFieldそこが間違っています。django モデル フィールド (django.db.models) ではなく、tastypie のフィールド (tastypie.fields) を使用する必要があります。次に、リソースは次のようになります。

class IncomeCategoryResource(ModelResource):
    parent_id = IntegerField(attribute="parent__id")
    class Meta:
        queryset = Category.objects.filter(type='income')

親の id フィールドを取得するために二重下線を使用していることに注意してください。

于 2013-08-15T13:10:32.800 に答える