在Django Admin中“实时”过滤选择字段

时间:2012-09-16 22:51:44

标签: django django-admin

我在选择字段中过滤值时遇到了一些问题。

这是我申请的模型:

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

我遇到的两个问题:

  1. 在管理员中,Rank的名称会显示在选项字段中,与附加Roles的次数相同。有没有办法让我摆脱重复的名字,只留下一个记录? 这可能与我对我的类建模的方式有关,我对Django来说是个新手。

  2. 如果我选择了Rank,我需要针对Roles可用的Roles过滤其Rank的选项字段,在用户甚至点击保存之前(ajax-esque)。有没有办法做到这一点?怎么样?

  3. 感谢您的时间。

    使用我的模特管理员代码进行编辑:

    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
    

0 个答案:

没有答案