如何在 django-admin 上过滤模型
how to filter models on django-admin
我有两个模型:
class Contrato(models.Model):
active= models.BooleanField(default=False, verbose_name="Activo?")
.....
def __str__(self,):
return str(self.id) + '- ' + str(self.forcenedor)
class Fatura(models.Model):
contrato = models.ForeignKey(Contrato, on_delete=models.CASCADE,verbose_name="Contrato")
designação = models. CharField(verbose_name="Designação",max_length=30)
..............
def __str__(self,):
return str(self.id)
当我在我的 django-admin 中添加一个新的“Fatura”时,我只想显示“Contrato”在“active”
上也是如此
这种类型的过滤器,我需要在我的管理文件中做还是我可以直接在我的模型文件中做?我该怎么做?
要过滤所有有效合同,您必须使用 Contrato 的对象管理器
active_contracts = Contrato.objects.filter(active=True)
您需要更新 admin.py 文件
from .models import Contrato
from django.contrib import admin
class ContratoAdmin(admin.ModelAdmin):
def get_queryset(self, request):
"""Make a queryset for list of results.
"""
qs = super().get_queryset(request)
return qs.filter(active=True)
admin.site.register(Contrato, ContratoAdmin)
根据您的评论,您执行以下操作。
您需要覆盖 admin.py 文件中的 get_form 方法。
def get_form(self, request, obj=None, **kwargs):
form.base_fields['contrato'].queryset = Contrato.objects.filter(active=True)
def get_form(self, request, obj=None, **kwargs):
form = super(FaturaAdmin, self).get_form(request, obj=obj, **kwargs)
form.base_fields['contrato'].queryset = Contrato.objects.filter(active=True)
return form
我有两个模型:
class Contrato(models.Model):
active= models.BooleanField(default=False, verbose_name="Activo?")
.....
def __str__(self,):
return str(self.id) + '- ' + str(self.forcenedor)
class Fatura(models.Model):
contrato = models.ForeignKey(Contrato, on_delete=models.CASCADE,verbose_name="Contrato")
designação = models. CharField(verbose_name="Designação",max_length=30)
..............
def __str__(self,):
return str(self.id)
当我在我的 django-admin 中添加一个新的“Fatura”时,我只想显示“Contrato”在“active”
上也是如此这种类型的过滤器,我需要在我的管理文件中做还是我可以直接在我的模型文件中做?我该怎么做?
要过滤所有有效合同,您必须使用 Contrato 的对象管理器
active_contracts = Contrato.objects.filter(active=True)
您需要更新 admin.py 文件
from .models import Contrato
from django.contrib import admin
class ContratoAdmin(admin.ModelAdmin):
def get_queryset(self, request):
"""Make a queryset for list of results.
"""
qs = super().get_queryset(request)
return qs.filter(active=True)
admin.site.register(Contrato, ContratoAdmin)
根据您的评论,您执行以下操作。 您需要覆盖 admin.py 文件中的 get_form 方法。
def get_form(self, request, obj=None, **kwargs):
form.base_fields['contrato'].queryset = Contrato.objects.filter(active=True)
def get_form(self, request, obj=None, **kwargs):
form = super(FaturaAdmin, self).get_form(request, obj=obj, **kwargs)
form.base_fields['contrato'].queryset = Contrato.objects.filter(active=True)
return form