[英]Django self-referential relationship?
我正在尝试创建模型页面,页面也应该能够有“子页面”。
我下面的模型代码在我的 Mac (python 2.6.1) 和 Ubuntu 10.04 (python 2.6.5) 上不断使Python 崩溃:
from django.db import models
from django.contrib import admin
class Page(models.Model):
slug = models.SlugField(blank=True)
title = models.CharField(max_length=100)
content = models.TextField(blank=True)
children = models.ManyToManyField("self", blank=True)
published = models.BooleanField(default=True)
created = models.DateTimeField(blank=True, auto_now_add=True)
def html(self):
html = "<li>"
html += self.title
children = self.children.all()
if len(children) > 0:
for page in children:
html += page.html()
html += "</li>"
return html
def __unicode__(self):
return self.title
class PageAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(Page, PageAdmin)
我做错了什么? 或者这种 HTML 渲染属于视图吗?
谢谢。
就模型本身而言,您只是在错误的方向上思考这个问题。 而不是
children = models.ManyToManyField("self", blank=True)
使用
parent = models.ForeignKey("self", blank=True, related_name="children")
这将允许您直接从页面记录访问子项,但应该是数据库中更直接的表示。
HTML 呈现通常发生在视图中,而不是模型中。 按照 meder 的建议使用 mptt。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.