如何解决如何在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 ”有效”
这种类型的过滤器,我需要在管理文件中执行吗,还是可以在此处直接在模型文件中执行?我该怎么办?
解决方法
您需要更新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)
,
要过滤所有活动合约,必须使用Contrato的对象管理器
active_contracts = Contrato.objects.filter(active=True)
,
def get_form(self,**kwargs):
form = super(FaturaAdmin,self).get_form(request,obj=obj,**kwargs)
form.base_fields['contrato'].queryset = Contrato.objects.filter(active=True)
return form
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。