Nous utilisons maintenant Django pour développer un site web multilingue. Nous avons une version linguistique différente pour le contenu sur notre site Web. Par exemple, pour un post, nous avons la version anglaise et espagnole. Actuellement nous utilisons ce modèle:Quel modèle est le meilleur?
class Post(models.Model):
user
title
detail
count_follower
...
orginal_language
date
class PostEspanish(models.Model):
post = models.ForeignKey(Post)
title
detail
Nous utilisons Postes pour tous les contenus en anglais et PostEspanish pour le contenu espagnol. Si quelqu'un écrit un article en anglais, nous le mettons simplement dans un modèle Post, et nous mettons un post traduit dans un modèle PostEspanish. Et si quelqu'un écrit un post en espagnol, nous créons d'abord une instance Post, puis créons une instance PostEspanish et mettons du contenu dans PostEspanish, et si quelqu'un traduit cet article en espagnol, nous mettons un post traduit dans son Post de référence.
Le stockage de contenu linguistique différent sur un modèle différent est dû au fait que le chercheur le souhaite de cette façon. Il dit que c'est bon pour la recherche.
Pour le rendre plus clair, par exemple, certains utilisateur écrit un message, nous allons effectuer les opérations suivantes:
if language == 'English':
post = Post.objects.create(..., orginal_language='english')
else:
post = Post.objects.create(..., original_language='espanish')
PostEspanish.objects.create(post=post, ...)
et TRADUIT:
post = Post.objects.get(id=id)
if post.orginal_language == 'english':
post = post.postespanish
#update post
post.save()
else:
#update post
post.save()
quelqu'un a dit aujourd'hui cette conception de modèle est vraiment mauvaise . Il a dit que le modèle actuel n'est pas bien orienté objet. Voici la façon dont ils le font:
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
Ainsi, le code sera comme ceci:
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,...)
Mais la plupart d'entre nous pensaient qu'il n'y a pas de différence entre ces deux approches. Et la conception de son modèle va générer une table de plus, ce qui est vraiment mauvais.
Alors, à votre avis, quel est le meilleur?
Le stockage de contenu linguistique différent sur un modèle différent est dû au fait que le chercheur le souhaite de cette façon. Il dit que c'est bon pour la recherche. – thoslin
S'il dit chapeau ayant une table pour l'anglais et une table pour l'espagnol aide la performance, il a tort. Utilisez une seule table pour le contenu avec une colonne pour indiquer la langue. –