2013-12-03 3 views
1

와 M2M :장고, 내 장고 응용 프로그램에서 모델 다음 한 동일 모델

제품 모델 :

class Product(BaseModel): 
    company = models.ForeignKey(Company, null=True, blank=True) 
    title = models.CharField(max_length=128,verbose_name="Product title") 

주문 모델 :

class Order(BaseModel): 
    company = models.ForeignKey(Company) 
    products = models.ManyToManyField(Product) 

나는 수 없습니다입니다 여러 개의 번호를 에 추가하려면 제품을 주문하십시오. 예를 들어, "Car"라는 제품이 있는데, 어떻게 하나의 Order에 여러 Car 객체를 추가 할 수 있습니까?

모든 주문에는 여러 개의 제품이 포함될 수 있습니다 (동일하거나 다를 수 있음).

답변

1

: 당신이 필요로하는 제품 모델 (주문을해야합니다 모든 제품을) 주문에 링크에서 외래 키 다음은 정상 대다 필드와는 달리, 추가, 만들거나 사용할 수 없습니다를 중간 테이블 https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

class Order(BaseModel): 
    company = models.ForeignKey(Company) 
    products = models.ManyToManyField(Product, through='OrderProduct') 

을 사용할 수 있습니다 할당 (즉, order.products.add(prod))에 관계를 만듭니다.

+0

주문하려면 어떻게 제품을 추가 할 수 있습니까? 이번 변경 전 나는 코드를 사용했다 : '제품에 대한 제품 : prod = Product.objects.get (uuid = product) order.products.add (prod)' – dease

+0

@ 답변을 업데이트했습니다. – ndpu

0

외래 키와의 많은 관계가 거꾸로 작용합니다. Order 모델에는 외래 키가 필요하지 않습니다.

class OrderProduct(BaseModel): 
    order = models.ForeignKey(Order) 
    product = models.ForeignKey(Product) 
    quantity = models.IntegerField() 

: 당신은 예를 들어, 해당 작업에 대한 세 번째 테이블을 사용할 필요가

class Product(BaseModel): 
company = models.ForeignKey(Company, null=True, blank=True) 
order = models.ForeignKey(Order) 
title = models.CharField(max_length=128,verbose_name="Product title") 
+0

을 그러나 모든 순서는 여러 (다른 여부) 제품을 포함 할 수 있습니다 :

prod = Product.objects.get(uuid=product) #order.products.add(prod) q = product_quantity order = order # order record must be created before OrderProduct.objects.create(order=order, product=prod, quantity=q) 

확인이 질문 : 당신은 수동으로 through 테이블에 레코드를 작성해야한다. 코드를 사용하면 작동하지 않습니다. – dease