2012-03-05 2 views
0

Я создаю купон-генератор для раздачи «получите 10 долларов США бесплатно, если вы зарегистрируетесь с помощью этого кода». База пользователей очень мала, и вероятность передачи более десяти купонов за раз маловероятна.Django Admin: Случайный ключ в TabularInline повторяющийся, не случайный

При создании новой маркетинговой кампании администратору предоставляются пять купонов в TabularInline, с возможностью создания большего с помощью кнопки «Добавить другой купон». Но купоны 6 и все остальные имеют тот же случайный код, что и купон 5; похоже, что Django на самом деле не запрашивает новый экземпляр объекта с сервера, а просто дублирует последний, который он видел.

код, чтобы сделать это:

class Coupon(models.Model): 
    campaign = models.ForeignKey(Campaign) 
    code = models.CharField(max_length = 32, blank=False, null=False, default=generate_code) 
    redeemed_by = models.ForeignKey(User, null = True, blank = True) 

Где generate_code() это функция, которая, хорошо, генерирует случайную строку. Мне кажется, что администратор Django должен соблюдать настройку default своих собственных классов Field, и он делает ... для первого n, созданного сервером администратора, но не для тех, которые создаются клиентским запросом.

Есть ли способ создать Django объекты на сервере и получить их? Должен ли я взломать свою собственную страницу для создания встроенных кодов? Или есть более умный способ сделать это?

+0

Похоже, что эти случайные купоны создаются специальным кодом, который вы написали, а не Django. Зачем использовать встроенные линии для этого? Существуют ли другие функции, кроме случайных сгенерированных купонов? Возможно, вам стоит подумать о создании настраиваемой функции ajax, которая создает и отображает только что созданные купоны. –

+0

@ dan-klasson: Я обновил вопрос, чтобы показать разбивку. Администратор Django не честно выполняет аргумент 'default'' models.Field'. Я пытаюсь понять, что я делаю что-то не так. –

ответ

1

Ссылка «Добавить другую» в строках django - это javascript на стороне клиента. Вероятно, поэтому он принимает последнее сгенерированное значение. Если вы хотите, чтобы он возвращал произвольную строку на стороне сервера, вам пришлось бы переопределить ее и реализовать свою собственную функцию ajax. Вы также можете создать на стороне клиента javascript.

+0

Ну, сосать. Это неприятная точка разрыва в Django - программные дефолты должны быть выполнены. –

Смежные вопросы