所以我正在构建一个基于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()
我应该将这些属性添加到此模型吗?
答案 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。