我在选择字段中过滤值时遇到了一些问题。
这是我申请的模型:
from django.db import models
class Role(models.Model):
name = models.CharField(max_length=20, blank=False)
def __unicode__(self):
return self.name
class Rank(models.Model):
name = models.CharField(max_length=20, blank=False)
role = models.ForeignKey(Role, blank=False)
def __unicode__(self):
return self.name
class Member(models.Model):
name = models.CharField(max_length=100, blank=False)
rank = models.ForeignKey(Rank, verbose_name = 'Member Rank')
mainrole = models.ForeignKey(Role, related_name = 'main_role', blank=False)
secondaryrole = models.ForeignKey(Role, related_name = 'secondary_role', blank=False)
picture = models.ImageField(
null=True,
blank=False,
upload_to='member/pictures/',
)
def __unicode__(self):
return self.name
只是澄清一下。会员可以拥有Rank
个,Rank
,最多2个Roles
。但是,Ranks
可以包含{n}种Roles
。
我遇到的两个问题:
在管理员中,Rank
的名称会显示在选项字段中,与附加Roles
的次数相同。有没有办法让我摆脱重复的名字,只留下一个记录? 这可能与我对我的类建模的方式有关,我对Django来说是个新手。
如果我选择了Rank
,我需要针对Roles
可用的Roles
过滤其Rank
的选项字段,在用户甚至点击保存之前(ajax-esque)。有没有办法做到这一点?怎么样?
感谢您的时间。
使用我的模特管理员代码进行编辑:
class MemberInlineFormset(BaseInlineFormSet):
def add_fields(self, form, index):
super(MemberInlineFormset, self).add_fields(form, index)
roles = Role.objects.none()
if form.instance:
try:
rank = form.instance.rank
except Rank.DoesNotExist:
pass
else:
roles= Role.objects.filter(role__within=Rank.role)
form.fields['mainrole'].queryset = roles
form.fields['secondaryrole'].queryset = roles
class MemberInline(admin.TabularInline):
model = Member
formset = MemberInlineFormset