2
我試圖爲我定義用戶訪問的外部組做一個API。我在django中設置了一個易於管理的設置,但我希望輸出對於其他團隊來說非常簡單。試圖製作一個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
理想我想能夠返回查詢對象與最終Django的休息框架打得很好,因爲我喜歡它是如何很好地返回取其形式要求
編輯相同的數據: 這是我在想什麼將是接近解決方案,但我知道我正在使用類繼承不正確
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