我尝试使用以下函数在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)
答案 0 :(得分:0)
我怀疑你想在你的过滤器表达式中使用self.model
:在ModelAdmin对象中,它只引用模型类,而不是实例。
事实上,这根本不是进行这种过滤的方法。您可能需要定义自定义模型表单,并使用formfield_for_foreignkey
作为比较来设置查询集,而不是定义self.instance
。