Администратор Django дублирует объекты - PullRequest
0 голосов
/ 22 ноября 2011

Я создал разрешения на основе части страны для моего веб-сайта для консоли администратора.

Я переопределил метод 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 или консолью администратора?

1 Ответ

0 голосов
/ 23 ноября 2011

Я исправил свою ошибку на самом деле.Функция набора запросов, которую я переопределял, возвращала повторяющиеся результаты, а администратор просто сходил с ума, даже если на самом деле дублированные результаты не были в базе данных.Просто добавил в конец моего набора запросов отдельный () и, похоже, он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...