【发布时间】:2011-06-11 03:34:42
【问题描述】:
我们现在正在使用 Django 开发一个多语言网站。我们网站上的内容有不同的语言版本。例如,对于帖子,我们有英语和西班牙语版本。 目前我们正在使用这个模型:
class Post(models.Model):
user
title
detail
count_follower
...
orginal_language
date
class PostEspanish(models.Model):
post = models.ForeignKey(Post)
title
detail
因此,我们对所有英语内容使用 Post,对西班牙语内容使用 PostEpanish。 如果有人用英语写了一篇文章,我们只是把它放在 Post 模型中,我们把翻译后的帖子放在 PostEspanish 模型中。如果有人用西班牙语写了一篇文章,我们首先创建一个 Post 实例,然后创建一个 PostEspanish 实例并将内容放入 PostEspanish 中,如果有人翻译了这篇西班牙语文章,我们将翻译后的文章放入其引用的 Post 中。
在不同的模型上存储不同的语言内容是因为搜索者想要这样。他说这对搜索有好处。
为了更清楚,例如,某个用户写了一篇文章,我们将执行以下操作:
if language == 'English':
post = Post.objects.create(..., orginal_language='english')
else:
post = Post.objects.create(..., original_language='espanish')
PostEspanish.objects.create(post=post, ...)
并翻译:
post = Post.objects.get(id=id)
if post.orginal_language == 'english':
post = post.postespanish
#update post
post.save()
else:
#update post
post.save()
今天有人说这个模型设计真的很差。他说当前的模型不是很好地面向对象的。这是他们的做法:
class Post(models.Model):
user
count_follower
...
orginal_language
date
class PostContentEnglish(models.Model):
post = models.ForeignKey(Post)
title
detail
class PostContentEspanish(models.Model):
post = models.ForeignKey(Post)
title
detail
所以代码会是这样的:
if language == 'English':
post = Post.objects.create(..., orginal_language='english')
PostContentEnglish.objects.create(post=post,...)
else:
post = Post.objects.create(..., orginal_language='espanish')
PostContentEspanish.objects.create(post=post,...)
但我们大多数人认为这两种方法没有区别。而且他的模型设计会多生成一张表,这真的很糟糕。
那你觉得哪个更好?
【问题讨论】:
标签: django database-design django-models