1

こんにちはStackoverflowの人々、

1つのモデルからForeignKeysの選択を参照するための最良の方法は何ですか?

GenericVehicle、Bikes、Carsのモデルを含むレンタルアプリに取り組んでいます。

class GenericVehicle(models.Model):
    licence = models.CharField(max_length=128)
    ...
    class Meta:
        abstract = True

class Bike(GenericVehicle):
    engine_type = models.CharField(max_length=128)
    ...

class Car(GenericVehicle):
    number_of_doors = models.SmallIntegerField()
    ...

これで、レンタル車両を登録したいレンタル登録のモデルができました。ここでのベストプラクティスについてはよくわかりません。これまでのところ、私は2つの外国の鍵を持っていて、少なくとも1つが満たされていることを確認しました。しかし、このソリューションは非常に非効率的であり、複数の車両タイプにうまく対応できません。

クラスの構造/定義を改善するための最良の方法は何ですか?

class Rental(models.Model):
    rental_bike = models.ForeignKey(Bike)
    rental_car = models.ForeignKey(Car)
    rental_date = ...

アドバイスありがとうございます。私はすでにしばらくの間、効率的な解決策を見つけようとしています。

4

1 に答える 1

3

Djangoはあなたにを提供しますGenericForeignKey。モデルのGenericForeignKeyフィールドにフィールドを設定する必要があります。1つは参照モデルContentTypeを保存するためのもので、もう1つはオブジェクトのIDを保存するためのものです。

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic

class Rental(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()

    rental_vehicle = generic.GenericForeignKey('content_type', 'object_id')

ただし、これはデータベースレベルの外部キーではなく、Djangoが外部キーの一般的な動作の一部をエミュレートしているだけであることに注意してください。

于 2012-08-10T08:57:26.103 に答える