2

我正在尝试为文章网站创建一个模型。我想将每篇文章与 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....?我想有更通用的解决方案,所以如果我绑定更多的文章,我不需要一次又一次地重新定义代码

我在想的不是用相关领域扩展 Article 模型。(看起来很难看)也许值得创建另一个模型?例如:文章集

但是如何定义无限制列表(没有项目限制)..你能建议一种方法吗?

提前致谢

4

2 回答 2

5

对于这种关系,您需要使用ManyToManyField 。

例如:

class Article (models.Model):
    # rest of fields up to and including body
    related_articles = models.ManyToManyField("self")
于 2009-10-17T15:47:42.520 回答
4

基本上可以将 ManyToMany 视为一个数组。所以在模板中你可以做这样的事情:

{% for rel_art in cur_art.related_articles.all %}
    <a href="{{rel_art.url}}">{{rel_art.title}}</a>
{% endfor %}

更笼统地说,Django 文档(和免费的在线Django Book)与 FOSSland 中的一样好。我强烈建议喝杯好咖啡,认真阅读。从阅读 Django 代码本身中还可以学到很多好东西——它结构良好,注释也很好。即使通过像 django.contrib.flatpages 这样的简单应用程序,您也可以真正了解可以用它做什么。

于 2009-10-17T19:46:49.610 回答