2011-07-16 9 views
1

의심 :장고 ManyToMany 내가이 모델을 가지고

class Comment(models.Model): 
    text = models.TextField(max_length = 300) 
    author = models.ForeignKey(User) 
    timestamp = models.DateTimeField(auto_now_add = True) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique = True) 
    comments = models.ManyToManyField(Comment) 

class Product(models.Model): 
    title = models.CharField(max_length = 30) 
    comments = models.ManyToManyField(Comment) 

나는 django.contrib.comments 거기 알고 있지만 지금은 내 자신의 의견 시스템을 쓰고 있어요.

UserProfile과 Product 개체는 주석 목록을 가질 수 있습니다. 논리적으로 올바른가?

내 역시는 다음 ManyToManyField 의미 :

  • 물체 A가 B이므로 물체 B가 많은가
  • 또는 많은 오브젝트 A가 많은 객체 B를 가지고 많은 개체 개체 있음?

올바른 문장은 어느 것입니까? 왜냐하면 (예를 들어) 제품에는 많은 댓글이 있지만 댓글에는 제품이 많지 않기 때문에 첫 번째 제품 일 경우 제 모델 레이아웃이 잘못 되었기 때문입니다.

의심의 여지가 있습니까?

답변

1

첫 번째 문은 ManyToManyField 당신이

class Comment(models.Model): 
    text = models.TextField(max_length = 300) 
    author = models.ForeignKey(User) 
    timestamp = models.DateTimeField(auto_now_add = True) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique = True) 
    comments = models.ManyToManyField(Comment) 

가 정의 할 때

주 "객체 A는 객체 B가를 많은 개체를 한 많은 객체 B를 가지고"올 사용자 프로파일에 대한 Comment에 정의 된 일종의 암시적인 ManyToManyField입니다. 예 :

class Comment(models.Model): 
    text = models.TextField(max_length = 300) 
    author = models.ForeignKey(User) 
    timestamp = models.DateTimeField(auto_now_add = True) 
    userprofiles = models.ManyToManyField(UserProfile) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique = True) 

실제로 많은 것을 정의 할 수 있습니다. 많은 테이블 어느쪽으로 든.

모델 정의는 두 개의 ManyToManyFields과 함께 작동하지 않습니다. 사용하고자하는 것은 GenericForeignKey이며, 무엇이든 다른 것을 첨부 할 수 있습니다 (주석 달기 프레임 워크가 IIRC에서 작동하는 방식입니다).

뭔가

같은
from django.db import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 

class Comment(models.Model): 
    text = models.TextField(max_length = 300) 
    author = models.ForeignKey(User) 
    timestamp = models.DateTimeField(auto_now_add = True) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
관련 문제