我在选择字段中过滤值时遇到了一些问题。
这是我的应用程序模型:
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
,最多可以有两个不同的Roles
。但是,Ranks
可以有 'n' 个类型的Roles
.
我遇到的两个问题:
在管理员中,
Rank
的名称出现在选择字段中的次数与Roles
附加到它的次数一样多。有没有办法让我摆脱重复的名字,只留下一个记录?这可能与我对课程的建模方式有关,我对 Django 有点陌生。如果我选择 a
Rank
,我需要在用户点击保存(ajax-esque)之前Roles
过滤他两个的选择字段以Roles
获取可用的。Rank
有没有办法做到这一点?如何?
感谢您的时间。
使用我的模型管理员的代码进行编辑:
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