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):

2つのモデル(フィールドカーを備えた車とガレージ= 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')
4

1 に答える 1

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,
                         )

詳細については、多対多の関係に関する追加フ​​ィールドのドキュメントを参照してください。

于 2012-09-29T23:06:52.873 に答える