0

Circuit モデル クラスの管理クラスで、外部キー フィールドのオブジェクトを次のようにフィルター処理しようとしています。

def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "current_firmware":
            kwargs["queryset"] = FirmwareVersion.objects.filter(firmware__circuit_model=self.model)
        return super(CircuitAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

current_firmware理由はわかりませんが、フィルタリング後にフィールドの選択肢のリストが空です。たぶん、誰でもこれで私を助けることができます。私はこれらのクラスを持っています:

class FirmwareVersion(models.Model):
    firmware = models.ForeignKey(Firmware)
    version = models.CharField(max_length=100)

class Firmware(models.Model):
    name = models.CharField(max_length=250)
    circuit_model = models.ForeignKey(Versiiplates)

class Versiiplates (Model):
     version = ForeignKey(Plates)
     nomer_oboznachenie = CharField(max_length=8)

class Circuit(models.Model):
    circuit_id = models.PositiveIntegerField(blank=True, null=True)
    model = models.ForeignKey(Versiiplates)
    current_firmware = models.ForeignKey(FirmwareVersion, blank=True, null=True)
4

1 に答える 1

0

self.modelインスタンスではなく、モデル クラスを参照するだけの ModelAdmin オブジェクトで、フィルタ式で使用したかったとは思えません。

実際、これはおそらくこの種のフィルタリングを行う方法ではありません。を定義するのではなく、formfield_for_foreignkeyおそらくカスタム モデルフォームを定義しself.instance、比較として使用してクエリセットを設定する必要があります。

于 2013-04-17T12:17:50.300 に答える