我正在尝试为文章网站创建模型。我想将每篇文章与3-5篇相关文章联系起来,所以我想的是以这种方式创建代码:
class Article (models.Model):
# Tiny url
url = models.CharField(max_length = 30, unique=True)
is_published = models.BooleanField()
author = models.CharField(max_length = 150)
title = models.CharField(max_length = 200)
short_description = models.TextField(max_length = 600)
body = tinymce_models.HTMLField()
related1 = models.ForeignKey(Article)
related2 = models.ForeignKey(Article)
related3 = models.ForeignKey(Article)
但不确定是否可以与同一模型建立外键关系。另外,例如,如果我决定将6,7篇文章绑定在一起,那将是如何工作的,我是否必须在模型中编写相关的4,5,6 ....我希望有更多常见的解决方案,所以如果我绑定更多的文章,我不需要一次又一次地重新定义代码
我在想的是不要扩展相关领域的文章模型..(看起来很难看) 也许值得创造另一种模式? 例如:ArticleSet
但是如何定义那些不受限制的列表(没有项目限制)..你能提出一个方法吗?
提前致谢
答案 0 :(得分:5)
您需要使用ManyToManyField来建立这种关系。
例如:
class Article (models.Model):
# rest of fields up to and including body
related_articles = models.ManyToManyField("self")
答案 1 :(得分:4)
基本上,ManyToMany可以被视为一个数组。所以在模板中你可以这样做:
{% for rel_art in cur_art.related_articles.all %}
<a href="{{rel_art.url}}">{{rel_art.title}}</a>
{% endfor %}
更一般地说,Django docs(以及免费在线Django Book)与FOSSland一样好。我强烈建议你喝一杯好咖啡并仔细阅读。阅读Django代码本身也可以学到很多好东西 - 它结构合理,评论很好。即使通过像django.contrib.flatpages这样的简单应用程序,也可以让您真正了解自己可以用它做些什么。