2012-09-29 3 views
1

중간 모델이있는 경우 어떻게 차 (Car)를 차고 (Garage)에 추가 할 수 있습니까? 나는 이것을 이해할 수 없다.데이터베이스에 데이터 추가 (중간 모델)

class Car(models.Model): 
    name = models.CharField(max_length=50) 
    price = models.DecimalField()  

class GarageCar(models.Model): 
    car = models.ForeignKey('Car') 
    quantity = models.IntegerField() 

class Garage(models.Model): 
    name = models.CharField("Garage_Name", max_length=30) 
    cars = models.ManyToManyField('GarageCar', blank=True, null=True) 
    owner = models.ForeignKey(User, related_name='owner_garage', verbose_name='Owner Garage') 

뷰 필드 자동차와

def add_car(request, car_id): 

나는 두 가지 모델이있는 경우

(자동차와 차고 = models.ManyToManyField ('자동차') 나는이 같은 것을 만들 :

def add_car(request, car_id): 
    if request.user.is_authenticated(): 
     user = request.user 
     car = Car.objects.get(id = car_id) 
     e = car.garage_set.create(name='example_name', owner=user) 

    return render_to_response('add.html') 

답변

1

먼저 모델을 몇 가지 변경해야합니다.

  1. 중간 모델 GarageCar에는 외래 키가 CarGarage이어야합니다.
  2. many to many 필드를 정의 할 때 through 인수를 사용하여 중간 테이블을 지정하십시오. 다음과 같이
는 모델을 변경

:

class GarageCar(models.Model): 
    car = models.ForeignKey('Car') 
    garage = models.ForeignKey('garage') 
    quantity = models.IntegerField() 

class Garage(models.Model): 
    name = models.CharField("Garage_Name", max_length=30) 
    cars = models.ManyToManyField('Car', through='GarageCar') 

그런 다음, 다음과 같이 차고에 자동차를 추가 할 수 있습니다

GarageCar.objects.create(car=car, 
         garage=garage, 
         quantity=1, 
         ) 

자세한 내용은 extra fields on many-to-many relationships의 문서를 참조하십시오.

관련 문제