私はユーザーアクセスを定義する外部グループのAPIを作ろうとしています。私は管理しやすいdjangoの設定を持っていますが、他のチームにとっては出力が非常に単純になりたいです。私のモデルのように見えないジャンゴ休憩APIを作成しようとしています
{
"user_list": {
"user": {
"username": "username1",
"top_accesses": ["top_access_1", "top_access_2", "top_access_5"],
"middle_accesses": ["middle_access_1", "middle_access_2", "middle_access_7"],
"lower_accesses": ["lower_access_1", "lower_access_2", "lower_access_22"],
},
"user": {
"username": "username2",
"top_accesses": ["top_access_1", "top_access_2", "top_access_8"],
"middle_accesses": ["middle_access_3", "middle_access_5", "middle_access_6"],
"lower_accesses": ["lower_access_21", "lower_access_33", "lower_access_36"],
}
}
}
しかし、私は私のモデルからこれらのセットを思い付くORMに建てられたDjangoのを使用してトラブルを抱えている:
これは私が探しているの出力のようなものになるだろうです。私はSQLでそれを行う方法を考えることができますが、これは特にきれいな方法ではありません。 TabularInlineを使用して、私はここでは管理者ページに
を見たい正確に何を示しているので、私はそれを行うには良い方法があるに違いありません知っている私のモデルです:
class TopAccess(models.Model):
name = models.CharField(max_length=100)
site_user_access = models.ManyToManyField(User, blank=True)
site_group_access = models.ManyToManyField(Group, blank=True)
class Meta:
verbose_name_plural = "Top Access"
def __str__(self):
return self.name
class MiddleAccess(models.Model):
name = models.CharField(max_length=100)
site_user_access = models.ManyToManyField(User, blank=True)
site_group_access = models.ManyToManyField(Group, blank=True)
class Meta:
verbose_name_plural = "Middle Access"
def __str__(self):
return self.name
class LowerAccess(models.Model):
name = models.CharField(max_length=100)
site_user_access = models.ManyToManyField(User, blank=True)
site_group_access = models.ManyToManyField(Group, blank=True)
class Meta:
verbose_name_plural = "Lower Access"
def __str__(self):
return self.name
理想的には、私は、クエリを返すことができるだろう私はそれがフォームが
編集を要求された方に同じデータを返す方法きれい好きであるため、最終的にはジャンゴ・休息・フレームワークとうまく演じているオブジェクト: これがあることを何が起こっているか、私は考えているありますソリューションに近いが、私は間違ってクラスの継承を使用している知っている
class MaybeThisCouldWork(User):
t_user = TopAccess.objects.filter(site_user_access=User)
m_user = MiddleAccess.objects.filter(site_user_access=User)
l_user = LowerAccess.objects.filter(site_user_access=User)
user_groups = User.objects.filter(id=User)
for user_group in user_groups:
t_group = TopAccess.objects.filter(
site_group_access=user_groups
)
m_group = MiddleAccess.objects.filter(
site_group_access=user_groups
)
l_group = LowerAccess.objects.filter(
site_group_access=user_groups
)
t_user = t_user | t_group
m_user = m_user | m_group
l_user = l_user | l_group
、このようなものであってもよいし、シリアライザを使用することができます。私はそれがどのように進むのかを知らせます。ありがとう! – joedurbak
本物の魔法は「loweraccess_set」プロパティです。私はそれが(私はかなりdjangoに新しい)存在しているか分からなかった。それが私が探していた正確なパラメータです。本当にありがとう! – joedurbak
これは、django ForeignKeyリレーションの逆引きアクセッサです。あなたはここのドキュメントでそれらを参照することができます.. https://docs.djangoproject.com/en/1.11/topics/db/queries/#following-relationships-backward – zaidfazil