我一直在创建基于国家/地区部分的权限到我的网站管理控制台。
我已经覆盖了我的类上的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 :(得分:0)
我实际修复了我的错误。我重写的查询集函数返回重复的结果,管理员只是吓坏了,即使重复的结果实际上不在数据库中。只是在我的查询集的末尾添加了一个distinct(),它似乎正在工作。