1

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

这是我的应用程序模型:

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.

我遇到的两个问题:

  1. 在管理员中,Rank的名称出现在选择字段中的次数与Roles附加到它的次数一样多。有没有办法让我摆脱重复的名字,只留下一个记录?这可能与我对课程的建模方式有关,我对 Django 有点陌生。

  2. 如果我选择 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
4

0 回答 0