2013-07-23 2 views
0

이것은 프로그램 버그 수정 문제가 아닙니다. 바보 같아요, 웹 사이트 디자인에 많은 경험이 없기 때문에. 내가 코드를 작성하기 전에 제 디자인 패턴이 올바른지 확인하고 싶습니다.Django에서 소셜 네트워크 용 컨텐츠 공유 모델을 설계하는 방법은 무엇입니까?

google + 또는 페이스 북과 같은 소셜 네트워크를 디자인하고 싶습니다. 콘텐츠를 공유하는 것처럼 기본 기능 만 수행합니다. google +와 마찬가지로 사용자는 텍스트, 사진, 링크 및 비디오와 같은 다양한 유형의 콘텐츠를 공유 할 수 있습니다. 그림과 같이 : enter image description here

나는 모든 유형의 콘텐츠를 공유 할 때마다 다른 모델을 디자인해야합니까? 하나 개의 클래스에서

class TextPost(models.Models): 
    text=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 

class GalleryPost(models.Model): 
    galleryTitle=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 

class Images(models.Models): 
    image = models.ImageField() 
    galleryPost=models.ForeignKey(GalleryPost) 

class LinkPost(models.Models): 
    link=... 
    createDate=... 

class VideoPost(models.Models): 
    video=... 

또는 넣어 모든 유형 : 아래의 코드처럼

class Post(models.Model): 
    text=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 
    galleryTitle=models.CharField(max_length=140) 
    link=... 
    video=... 

내가 선택하는 경우 첫 번째 방법, 쉽게 한 페이지에서 생성 된 날짜 이후의 모든 종류를 나열인가요? 다른 좋은 방법이 있습니까?

답변

0

두 방법 모두 유효한 접근 방법이지만 첫 번째 방법은 쿼리하기가 어렵습니다. 최신 내용의 혼합 된 피드를 보여주고 싶으므로 데이터베이스를 쉽게 쿼리 할 수 ​​있습니다.

그런 경우 모든 모델이 공유 속성 (작성자, 작성자)을 정의하는 기본 클래스를 갖기를 원할 것입니다. 그런 다음 특정 하위 클래스에 대해 원하는 추가 특성을 추가합니다. docs.djangoproject.com의 Model Inheritance을 참조하십시오.

class Post(models.Model): 
    author = models.ForeignKey('auth.user') 
    created_at = models.DateTimeField() 

class LinkPost(Post): 
    link = models.URLField() 

class ImagePost(Post): 
    image = models.ImageField() 
0

이 작업을 수행하면 첫 번째 디자인을 선택할 수 있습니다. 하지만이 클래스 카테고리 등의 카테고리 모델 (models.Models)이 생성됩니다 : 범주 = models.CharField (MAX_LENGTH = 100)

클래스 VideoPost (models.Models) : 카테고리 = models.ForeignKey (카테고리) ......

관련 문제