django - 从管理面板的选择字段中删除选定的选项
问题描述
如果选择一次,我想减少管理面板中的选择选项。
管理员.py
class MyModelForm(forms.ModelForm):
LOC = [('op1', 'op1'), ('op2', 'op2'),...]
location = forms.ChoiceField(choices=LOC)
class DataModelAdmin(admin.ModelAdmin):
form = MyModelForm
list_display = ('location',)
search_fields = ['location']
def get_ordering(self, request):
return ['location']
admin.site.register(DataModel, DataModelAdmin)
模型.py
class DataModel(models.Model):
location = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.location
我正在尝试这样做,但它会删除重新启动服务器时的选定选项
解决方案
如果我正确解释了您的问题,您想从字段选择中删除对象的位置...
class MyModelForm(forms.ModelForm):
LOC = [('op1', 'op1'), ('op2', 'op2')]
location = forms.ChoiceField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance:
self.fields['location'].choices = [
choice for choice in self.LOC
if choice[0] != self.instance.location
]
else:
self.fields['location'].choices = self.LOC
实际上,在第二次阅读时,也许您正在寻找过滤器?
from django.contrib.admin import SimpleListFilter
class LocationFilter(SimpleListFilter):
title = 'location'
parameter_name = 'location'
def lookups(self, request, model_admin):
locations = DataModel.objects.values_list('location', flat=True)
return locations
def queryset(self, request, queryset):
if self.value():
return queryset.filter(location=self.value())
然后添加list_filter = (LocationFilter,)
到您的管理类。
推荐阅读
- c# - c# 浮点数上的模运算符
- python - 将文件转换为包含重复项的字典
- python - 如何将交替三角函数添加到 Python 中的数组?
- r - 使用 R 在大型数据集中单独运行
- ios - 无法创建符合相同协议的视图数组?
- python - VSCode Python 调试器
- vba - .查找多次
- salesforce - 如何在可批处理 Salesforce 顶点代码中报告记录,以便它应该报告 Level2 或 Level3 为 NULL 的位置
- javascript - Jquery进度条阻止PHP文件上传?
- sparql - SPARQL 如何在 RDF 图中找到通过多个节点的最短路径