[英]Filter ForeignKey in django admin panel
我將從顯示模型的外觀開始:
from django.db import models
class Project(models.Model):
#.....
pu = models.ForeignKey('Person', default='', related_name='pu')
se = models.ForeignKey('Person', default='', related_name='se')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
department = models.ForeignKey('Department', default='')
class Department(models.Model):
abbreviation = models.CharField(default='', max_length=3)
full_name = models.CharField(default='', max_length=20)
我想將所有人都放在一張桌子中,但是在管理面板中我想顯示兩個分開的過濾列表:
我進行了很多搜索,但是對django和Python還是陌生的。
我該如何實現?
django管理員的解決方法通常是可行的,並且會有一些黑客攻擊。
嘗試創建myapp / admin.py文件
from django.contrib import admin
from .models import Project, Person
class ProjectAdmin(admin.ModelAdmin):
...
filter_horizontal = ('pu', 'se')
def get_form(self, request, obj=None, **kwargs):
form = super(ProjectAdmin, self).get_form(request, obj, **kwargs)
if obj:
form.base_fields['pu'].queryset = Person.objects.filter(department__abbreviation__startswith='pu')
form.base_fields['se'].queryset = Person.objects.filter(department__abbreviation__startswith='se')
return form
admin.site.register(Project, ProjectAdmin) # register it
我改變了我的模特。 我將不使用“人員”和“部門”,而是切換到django的“用戶”和“組”。
為了根據需要過濾它,我使用了limit_choices_to
。
pu = models.ForeignKey("auth.User", related_name='pu', limit_choices_to={'groups__name': "Purchasing"})
se = models.ForeignKey("auth.User", related_name='se', limit_choices_to={'groups__name': "Sales"})
我基於以下答案: Django,在模型外鍵中按組過濾用戶
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.