2

私は次のモデルを持っています:

class Benchmark(models.Model):
    name = models.CharField(max_length=50)
    location = models.CharField(max_length=150)
    platforms = models.ManyToManyField('Platform')

class Platform(models.Model):
    name = models.CharField(max_length=50)

class KnobItem(models.Model):
    value = models.CharField(max_length=150)
    knob = models.ForeignKey('Knob')

class BenchmarkKnobItem(KnobItem):
    benchmark = models.ForeignKey('Benchmark')

class PlatformKnobItem(KnobItem):
    platform = models.ForeignKey('Platform')

class Knob(models.Model):
    name = models.CharField(max_length=150)

管理者にはBenchmarkKnobItemPlatformKnobItemインラインとして と があります。新しいベンチマーク ノブを追加するためのドロップダウン メニューには、使用可能なプラットフォーム ノブもリストされるという望ましくない効果があります。次にformfield_for_foreignkey、利用可能なノブをそれぞれのベンチマークまたはプラットフォーム モデルに適用する方法を使用しました。

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "knob":
        kwargs["queryset"] = BenchmarkKnobItem.objects.all()
    return super(BenchmarkKnobItemInline, self).formfield_for_foreignkey(db_field, request, **kwargs)

残念ながら、これでは新しいインライン オブジェクトを作成できません。管理者は、「有効な選択肢を選択してください。その選択肢は利用可能な選択肢の 1 つではありません」と言います。これは、オブジェクトがまだ保存されていないためだと思います。

利用可能な選択肢をそれぞれのタイプに制限しながら、新しいノブを作成できるようにする方法について誰かアイデアはありますか?

4

0 に答える 0