2015-10-15 228 views
0

我想自定义Django接口。 我有一个CategoryAdmin(admin.ModelAdmin),它有一个foreignkey自己,每个类别可以从同一个表中的SubCategories。过滤|后控制查询集Django Admin

每个具有子类别的类别都将显示为内联。 基本上在查询集我想告诉那些谁的父母= 0,所以我overrided get_queryet这主要类别:由家长= 0

def get_queryset(self, request): 
    if request.user.is_superuser: 
     qs = super(CategoryAdmin, self).get_queryset(request) 
     return qs 

    company = CompanyUsers.objects.filter(UserId = request.user.id) #not relevant 
    companyid = company.values_list('CompanyId', flat=True) #not relevant 
    qs = Category.objects.filter(CompanyId = companyid, Parent = 0) 
    return qs 

现在,当用户挑选类别之一,内联进行过滤但点击到变化他们当我得到了错误:

“与主键类对象的‘x’不存在”

如何筛选仅在主类别查询集什么想法?

注意:当删除“Parent = 0”时,错误消失。

注2:可能有助于了解哪个实例被点击。我知道这是可能通过重写get_formset可惜get_queryset是get_formset :(

非常感谢之前调用。

回答

1

父是指分类对象,为什么还要用0,而不是无呢?家长必须是一个对象不是整数。

  1. 重命名属性CompanyId,家长必须成为companyId,父母
  2. 在您的范畴类中声明父为:

    父= models.ForeignKey(用户,空=真,空白= True,则默认值=无)

独生子女类别将有一个家长的关系,如果一类是父母,然后父母将无。然后,当你想获得父类别,你会过滤你的查询,如:

Category.objects.filter(companyId = companyid, parent = None) 

此外,父母将是一个类别对象不是整数。

+0

父指的是表中的PK,因此不能为无。另外,我没有看到这是如何解决我的问题。 – YanivMor

+0

为什么外键不能为空? – Kostas

+0

您可以看到更新的答案以获取更多信息。 – Kostas