gpt4 book ai didi

python - 循环父外键

转载 作者:行者123 更新时间:2023-11-28 20:49:11 25 4
gpt4 key购买 nike

我的 Django 项目中有一个模型如下:

class Category(models.Model):
parentCategory = models.ForeignKey(Category,null=True,blank=True)
category = models.CharField(max_length=255)

def __unicode__(self):
return self.category

我用它来设置类别 heirachy。一些类别的父类别有一个父类别,也有一个父类别等。我想知道如何在 __unicode__ 方法中循环这个结构?

干杯,本

更新:以下是我的类别表中的结构:

Parent
Parent -> Sub Parent
Parent -> Sub Parent -> Sub Sub Parent

Aamir Adnan 的“get_name”函数正在返回:

Parent
Sub Parent -> Sub Sub Parent
Sub Sub Parent

我需要它像这样显示:

Parent
Parent -> Sub Parent
Parent -> Sub Parent -> Sub Sub Parent

有什么想法吗?

最佳答案

您所描述的是树结构,不幸的是,遍历递归外键关系的所有父元素是一项非常昂贵的操作;每次查找 parent 都需要一次数据库命中,因为其他答案展示了这样做的方法。

我建议您改为使用允许高效树查询的表结构。有几种方法可以做到这一点,但为了给您指明正确的方向,我建议您查看 django-mptt。或 django-treebeard .

例如,使用 django-mptt,您可以使用以下通用结构实现此目的,这只会导致一次额外的数据库命中以查询目标类别的所有祖先。

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey


class Category(MPTTModel):
name = models.CharField(max_length=255)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

def __unicode__(self):
ancestors = self.get_ancestors(ascending=False, include_self=True)
return ' -> '.join(category.name
for category in ancestors)

关于python - 循环父外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com