向django模型添加属性

时间:2014-06-19 20:09:04

标签: django wiki

所以我正在构建一个基于Django的wiki类型的应用程序。我从一些代码中将它一起攻击,现在我正在尝试为我们的特定需求添加所有必要的功能。

但是,我想要做的是能够从几个下拉菜单中添加值。一个是国家,另一个是类别。所以最终的结果就像是 - 阿富汗 - >政治 - >阿富汗宪法。

目前该模型如下所示:

from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

# Create your models here.

class PublishedArticlesManager(models.Manager):

    def get_query_set(self):
        return super(PublishedArticlesManager, self).get_query_set().filter(is_published=True)

class Article(models.Model):
"""Represents a wiki article"""

title = models.CharField(max_length=100)
slug = models.SlugField(max_length=50, unique=True)
text = models.TextField(help_text="Formatted using ReST")
author = models.ForeignKey(User)
is_published = models.BooleanField(default=False, verbose_name="Publish?")
created_on = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
published = PublishedArticlesManager()

我应该将这些属性添加到此模型吗?

2 个答案:

答案 0 :(得分:1)

我会做以下事情:

  • 为类别和国家/地区创建单独的类。
  • 使用外键建立类别,国家/地区和文章之间的关系。
  • 您可以创建递归关系,以便每个类别都可以拥有父级 (即parent = models.ForeignKey("self", blank=True, null=True, related_name='children')

答案 1 :(得分:0)

country是一个具有静态选择集的属性。因此,我会使用一个静态的国家/地区列表(事实上,我有一个here给你,从pycountry 0.14.8中提取。由于您可以在Django应用程序中免费使用这些选项,因此可以节省数据库命中率。只要将一篇文章归属于一个国家/地区,我就会将其作为Article模型中的一个字段包含在内(也可能将其编入索引)。即使您有时需要多个国家/地区,CommaSeparatedIntegerField的轻微更改也可以提供简单的解决方案。

类别本质上更具动态性,通常会添加更多类别或更改或删除其中一些类别。对于这个单独的模型是个好主意。正如RohitJ所建议的那样,你可以拥有一个与自身具有递归关系的模型,以允许父类别。许多现有应用程序还提供可轻松合并到项目中的类别模型,例如我在当前项目中使用的django-categories