Я создал разрешения на основе части страны для моего веб-сайта для консоли администратора.
Я переопределил метод 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)
После запуска метода, когда он возвращает вас на страницу администрирования списка только что добавленной или измененной модели, новый объект появляется там дважды, и обе ссылки переходят в одно и то же место. У них точно такой же ПК. И когда я нажимаю на ссылку, чтобы отредактировать объект в консоли администратора, это выдает следующее:
'get () вернул более одного VisaType - вернул 2! Параметры поиска были {'pk': 31} '
Мне было просто любопытно, была ли у кого-нибудь еще проблема с django или консолью администратора?