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

标签 python json flask peewee 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”}]}]

模型.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

当然,您可以自定义以上内容以满足您的需求。如果您在子类别类中定义 lated_name ,则此方法有效:

class Subcategory(db.Model):
       name = CharField()
       category = ForeignKeyField(Category, related_name = 'subcategories')

这是一个link to the example app我曾经想出这个办法;只需运行它,您就可以看到它是如何工作的。

关于python - 如何在 python Flask-peewee 中反转外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028305/

相关文章:

python - 如何在 lambda 中指定参数类型?

javascript - 示例 jsTree 代码不起作用

python - Flask-SQLAlchemy 缺少 "caching_sha2_password"身份验证模块

php - 从 MySQL DB 列中选择 JSON 数据并显示

python - 在 Flask 重定向中测试 URL 参数

python - 使用 URL 处理器正确格式化规范的 URL 结构

python - LocalAudioFile(file) 错误返回 OSError : [Errno 2] No such file or directory

python - 当文件不存在/无法运行时如何阻止程序关闭

python - 不要打印 "optimization terminated successfully"scipy.optimize.fmin?

javascript - 如何使用 jquery 递归地附加此树数据?