Django:使用未定义的字段数制作模型

时间:2009-10-17 15:44:24

标签: django models

我正在尝试为文章网站创建模型。我想将每篇文章与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

但是如何定义那些不受限制的列表(没有项目限制)..你能提出一个方法吗?

提前致谢

2 个答案:

答案 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这样的简单应用程序,也可以让您真正了解自己可以用它做些什么。