繁体   English   中英

如何在python Flask-peewee中反转外键

[英]How to Reverse Foreign key in python Flask-peewee

我正在使用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

您可以使用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')

这是我用来弄清楚示例应用程序链接 只需运行它,便可以看到它的工作原理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM