models.py に ForeignKey BodyMaterial を持つ CarType があります。
class BodyMaterial(models.Model):
location = models.ForeignKey('CarType')
name = models.CharField(max_length=255)
class CarType(models.Model):
name = models.CharField(max_length=255)
default_body_material = models.ForeignKey(BodyMaterial, null = True, blank = True, default = "", limit_choices_to={'location__exact': 1})
BodyMaterial は、私の admin.py の CarType のインラインです。
class BodyMaterial_Inline(admin.StackedInline):
model = BodyMaterial
extra = 1
class CarType_Admin(admin.ModelAdmin):
inlines = [BodyMaterial_Inline]
admin.site.register(CarType, CarType_Admin)
default_body_material の ForeignKey をフィルタリングして、関連する BodyMaterials (同じ管理ページに表示/追加されたもの) のみを表示したいと思います。たとえば、2 人乗りの CarType を作成し、同じページに BodyMaterials を追加しました。次に、SVU CarType とその他の BodyMaterials をいくつか作成します。2 人乗りの CarType に戻ると、関連する BodyMaterials のみが default_body_material のドロップダウンに表示されます。
ID で limit_choices_to を使用してフィルタリングしようとしています。オブジェクトのIDは実行時に決定されるため、post_initを使用してこれを行っています。
def setID(**kwargs):
instance = kwargs.get('instance')
default_body_material = instance._meta.get_field_by_name('default_body_material')[0]
default_body_material.limit_choices_to = {'location__exact': instance.id}
post_init.connect(setID, CarType)
残念ながら、それは何もしません。私は何が欠けていますか?私の目的のためにForeignKeyをフィルタリングする理由はありますか(これはおそらく非常に基本的なことです)?
この質問は管理者インターフェースのみを対象としていることにご注意ください。