選択フィールドの値をフィルタリングする際に問題が発生しています。
私のアプリケーションのモデルは次のとおりです。
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
明確にするために。メンバーは 1 つRank
、そこからRank
最大 2 つの異なるRoles
. ただし、Ranks
「n」種類のRoles
.
私が抱えている2つの問題:
admin では、の名前は、そこに添付されて
Rank
いる回数だけ選択フィールドに表示されます。Roles
重複する名前を取り除き、1 つのレコードだけを残す方法はありますか? これは、私がクラスをモデル化した方法に関係している可能性があります.Djangoは初めてです。を選択した場合、ユーザーが保存 (ajax 風) を押す前に、
Rank
彼の 2 つの選択フィールドをそので使用できる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