2012-09-29 53 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. 当您定义多对多字段时,请使用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的文档获取更多信息。