2011-11-22 92 views
0

我一直在创建基于国家部分的权限到我的网站的管理控制台。django管理员复制对象

我已经覆盖了save_model()方法上我的课,从admin.ModelAdmin类继承,这一点:

def save_model(self, request, obj, form, change): 
    try: 
     form_cleaned_countries = [self.get_field(c,self.country_field).pk for c in form.cleaned_data[self.country_field.split('__')[0]]] 
    except TypeError: 
     form_cleaned_countries = [self.get_field(form.cleaned_data[self.country_field.split('__')[0]], self.country_field).pk] 

    type_of = 'change' if change else 'add' 
    cbp = [c.country.pk for c in self.get_country_based_permissions(request, self.app_model, type_of)] 

    valid = True 
    countries_not_valid_for = [] 
    for c in form_cleaned_countries: 
     if not c in cbp: 
      valid = False 
      countries_not_valid_for.append(Country.objects.get(pk=c)) 

    if not valid: 
     raise Exception('You do not have the permission to \'%s\' on %s for %s.' % (type_of, self.model, countries_not_valid_for)) 

    print 'Saving....' 
    super(CountryBasedPermissionsAdmin, self).save_model(request, obj, form, change) 

的方法后运行,当它带你回到列表的管理页面刚刚添加或更改的模型,新对象出现两次,并且两个链接都到达完全相同的位置。他们有完全相同的PK。而当我点击链接编辑管理控制台中的对象它与此错误:

'get()返回多个VisaType - 它返回2!查询参数是{'pk':31}'

我只是好奇,如果其他人有django或管理控制台这个问题?

+0

我也得到了这个错误,到目前为止还没有找到一个修复:(其不仅与管理员,但 – Paulo

+0

我修正了我的错误实际上我重写的查询集函数是返回重复结果,而管理员只是奇怪的是,即使是重复的结果实际上并不在数据库中,只是在我的queryset的末尾添加了一个distinct(),并且它似乎正在工作。 – vishen

+0

如果您自己修复它,请将该解决方案作为答案发布不是评论)并接受它。 –

回答

0

我修正了我的错误其实。我被覆盖的查询集函数返回重复结果,而管理员只是吓坏了,即使重复的结果实际上并不在数据库中。只是在我的查询集的末尾添加了一个distinct(),它似乎正在工作。