我正在使用Flask-peewee并且有两个表类别和子类别,我想制作一个api来列出所有子类别基于JSON中的类别。 (反向外键)
因此,如果我们有5个主要类别& 20子类别,我们需要在5个主要类别下列出20个子类别,因此我们只应在JSON中显示5条记录。
例如:
[{“name”: “medical”,subCategories: [{“name”:”Medical Dental Tourism”},{“name”:”another”}]},{“name”: “Restaurants”,subCategories: [{“name”:”Cafes”},{“name”:”another”}]}]
Models.py
class Category(db.Model):
__tablename__ = 'category'
id = CharField(primary_key=True)
name= CharField()
def __unicode__(self):
return self.image
class Subcategory(db.Model):
__tablename__ = 'subcategory'
id = CharField(primary_key=True)
parent_id = ForeignKeyField(db_column='parent_id', rel_model=Category )
name= CharField()
api.py
class CategoryResource(RestResource):
exclude = 'created_at'
class SubcategoryResource(RestResource):
exclude = 'created_at'
include_resources = {'parent_id': CategoryResource} #I need this to be backwards
答案 0 :(得分:2)
您可以使用prepare_data()
自定义API输出内容,如下所示:
class CategoryResource(RestResource):
def prepare_data(self, obj, data):
data["subcategories"] = []
for item in obj.subcategories:
data["subcategories"].append({"name" : item.name})
return data
当然,您可以自定义上述内容以满足您的需求。如果您在子类别类中定义related_name
,则此方法有效:
class Subcategory(db.Model):
name = CharField()
category = ForeignKeyField(Category, related_name = 'subcategories')
这是我曾经想过的link to the example app;只需运行它就可以看到它是如何工作的。