1

私は Django とデータベースが初めてで、モデルに関する Django のドキュメントを読んだ後、次の質問があります。VehicleName、CarManufacturer、TruckManufacturer の 3 つのモデルがあるとします。CarMaunfacturer に多くの VehicleNames があり、TruckManufacturer にも多くの VehicleNames があるデータベース関係を作成しようとしています。ここでの関係は何ですか?Djangoでそれを定義する方法は? CarManufacturer と TruckManufacturer の両方で models.ForeignKey(VehicleName) を定義するのと同じくらい簡単ですか? ありがとう。

from django.db import models

class CarManufacturer(models.Model):
    vehicle_name = models.ForeignKey(VehicleName)  # IS THIS CORRECT???
    # ...
    pass

class TruckManufacturer(models.Model):
    vehicle_name = models.ForeignKey(VehicleName)  # IS THIS CORRECT???
    # ...
    pass

class VehicleName(models.Model):
    # ...
4

2 に答える 2

1

あなたが説明していることを正確に行うには:

CarMaunfacturer に多くの VehicleNames があり、TruckManufacturer にも多くの VehicleNames があるデータベース関係を作成しようとしています

両方の製造元モデルに対して、VehicleName に null 許容の外部キーを作成します。

class CarManufacturer(models.Model):
    # field definitions here

class TruckManufacturer(models.Model):
    # field definitions here

class VehicleName(models.Model):
    car_manufacturer = models.ForeignKey(CarManufacturer, blank=True, null=True)
    truck_manufacturer = models.ForeignKey(TruckManufacturer, blank=True, null=True)

CarManufacturer次に、 orのインスタンスはTruckManufacturer、属性を介して名前を取得できvehiclename_setます。

より高度な設計では、メーカーの共有動作を 1 つのモデルに抽象化してから、複数テーブルの継承を使用します。

class Manufacturer(models.Model):
    # shared car and truck manufacturer fields go here

class CarManufacturer(Manufacturer):
    # car manufacturer specific fields go here

class TruckManufacturer(Manufacturer):
    # truck manufacturer specific fields go here

class VehicleName(models.Model):
    manufacturer = models.ForeignKey(Manufacturer)

詳細については、複数テーブルの継承に関するドキュメントを参照してください。

于 2013-07-27T21:43:00.403 に答える
0

メーカー・車両関係の特性をご理解いただけていないと思います。あなたが示そうとしていると思うのは、特定のものは特定のものVehicleに属しているということmanufacturerです。

このタイプの関係は、実際には、クラスで と呼ばれる外部キーとしてクラスで定義されVehicleます。manufacturerVehicle

メーカーの下で多くの車両を定義している場合は、プロパティの名前を などに変更するだけでcar_model問題ありません。

理解は十分にできていると思います。外部キーは 1 つのテーブルのプロパティにすぎないことを覚えておいてください。また、関係が確立されるまで、他のテーブル自体については何も言わないでください。

複数のオブジェクトを使用してより大きな関係で作業している場合は、 django ドキュメントで説明されている多対多フィールドの使用を検討する必要があります。

記事に多くの出版物がある方法を示す例があります。

class Publication(models.Model):
    title = models.CharField(max_length=30)

    # On Python 3: def __str__(self):
    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ('title',)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

    # On Python 3: def __str__(self):
    def __unicode__(self):
        return self.headline

    class Meta:
        ordering = ('headline',)
于 2013-07-27T21:21:50.773 に答える