Jil*_*loc 10 django multilingual django-models
我是django的初学者.(我刚刚完成了本教程并遵循本指南http://www.gettingstartedwithdjango.com)我想建立一个多语言内容的网站,我知道哪种是最佳做法,至少对于模型:
弗拉迪斯拉夫是对的,这完全取决于该表所包含的数据.举个例子:
class Book(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    name = models.CharField(max_length=255, unique=True)
    plot = models.TextField()
    slug = models.SlugField(max_length=255, blank=True, default='')
class Chapter(models.Model):
    book = models.ForeignKey(Book)
    chapter = models.SmallIntegerField()
    title = models.CharField(max_length=255, blank=True)
    pages = models.SmallIntegerField()
    pub_date = models.DateTimeField(auto_now_add=True)
可能性:
所以我认为我必须为每种语言保留一本书的实例,我至少有一本书的章节.
我希望很清楚!再次感谢大家
对我来说,这一切都取决于桌子所包含的数据,没有一种尺寸适合所有人.
对于系统表(类别,字段选择),我为不同的语言执行一个表不同的列.旧的但很好的实现是django-transmeta.
对于具有大量行的表 - 具有公共信息的表和可翻译的表.通过这种方式,您可以动态添加语言 - 适用于您希望为用户提供多种语言选择的情况.显然我不确定这种方法有很好的实施方式.django-hvad是一个实现,但它仍然是测试版,我个人不喜欢使用它.
在这里,您可以找到有关可用插件的更多信息.
我可以推荐以下型号.
class Book(models.Model):
    """Model for common book info"""
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    #Other common fields
class BookTranslation(models.Model):
    """Model for translatable book info"""
    book = models.ForeignKey(Book, related_name="translations")
    language = models.CharField(max_length=2)
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(max_length=255, blank=True, default='')
    plot = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
class Chapter(models.Model):
    """Model for common chapter info"""
    pub_date = models.DateTimeField(auto_now_add=True)
    pages = models.SmallIntegerField()
    #I'll suggest such relation so you can get the chapters from book 
    #and book translation objects
    #related_name='+' means no related_name
    #You need to specify it when you have 2 FK to same model
    book = models.ForeignKey(Book, related_name='+')
    book_translation = models.ForeignKey(Book, related_name='chapters')
class ChapterTranslation(models.Model):
    """Model for translatable chapter info"""
    chapter = models.ForeignKey(Chapter, related_name="translations")
    language = models.CharField(max_length=2)
    title = models.CharField(max_length=255, blank=True)
在这种情况下,您熟悉select-related和prefetch相关是很好的
在任何情况下,您都需要在顶部构建抽象,以便使用该结构.
| 归档时间: | 
 | 
| 查看次数: | 6590 次 | 
| 最近记录: |