将数据添加到数据库(中间模型)

时间:2012-09-29 21:17:23

标签: django django-orm

如果我有中间车型,如何将车辆(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):

如果我有两个型号(Car and Garage with field cars = models.ManyToManyField('Car')我会创建这样的东西:

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 个答案:

答案 0 :(得分:1)

首先,您需要对模型进行一些更改:

  1. 中间模型GarageCar需要有CarGarage的外键。
  2. 定义多对多字段时,请使用through参数指定中间表。
  3. 按如下方式更改模型:

     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上的文档。