Передающая начальная буква в ModelFormSet Django

Принятый non-negotiables:

первым экраном должен быть очень простой низкий служебный HTML с легко identiable синглом (мудрый ботом или мудрый людьми) кнопка для нажатия или эквивалентный для указания однозначно, "Я хочу свое Дерьмо". Поскольку мы принимаем худший случай - у Вас есть эквивалент DoS-атаки от комбинации ботов и неботов, все сначала нажимают на сайт (до identfiability). Поэтому давайте раздадим их так быстро, как мы можем от кэшей, мягкого echobots, и т.д.

(Примечание: Что касается wooters, это - то, что происходит так или иначе; это столь же болезненно для пользователей что касается Woot, таким образом, что-либо, что помогает поглотить или смягчить первое экранное приобретение, в интересах всех этих 3 участвующих сторон.)

Затем процесс больше не должен ухудшать для неботов, чем это в настоящее время без дополнительных шагов (или боль) для legits. (Фоновое примечание по текущему дизайну: Текущий wooters обычно будет уже входиться в систему или может войти в систему во время процесса покупки. Новые покупатели должны зарегистрироваться во время покупки. Таким образом, это практически более быстро, чтобы быть уже зарегистрированным и более быстрое все же, чтобы уже быть зарегистрированным.)

Для завершения загаженной продажи по прогрессии экранов транзакции нужно переместиться (скажите 5, плюс или минус, в зависимости от обстоятельств). Победители являются первыми, кто завершает полную навигацию. Текущий процесс вознаграждает ботов (или кто-либо еще), кто завершает всю последовательность 5 экранов наиболее быстро; но вся прогрессия смещается к быстрым ответам (т.е. боты).

Никакой вопрос боты будут иметь преимущество для первого экрана; и безотносительно края, которого они достигли от той точки, они сохраняют через остальную часть экранов, плюс любое преимущество botness обеспечивает на других этапах также.

<час>

, Что, если Woot должны были намеренно отделить процесс организации очередей после первого экрана и подать каждую сессию от той точки в последовательность шагов fixed-minimum-time? Второй экран не был бы даже представлен, пока 30 секунд не передали; после того, как это было отправлено, то же для следующих экранов. Я держал пари, что wooters не имел бы никакой проблемы, если бы им сказали, что после первого экрана они будут ожидать в очереди (который уже верен), который распределил бы нагрузку со временем способом, которая должна взять не более, чем прежде, быть более устойчивой, и справка избавляются от ботов. В этой точке можно добавить часть бота speedbumps упомянутый выше (тонкие вариации в Объектах DOM, и т.д.) Просто преимущество от восприятия, что Woot немного больше контролирует вещи, помог бы.

, Если намного более высокая пропорция хитов начальной буквы BOC могла бы непосредственно перейти в неболее дружественный для бота нестрого ограниченный во времени процесс на их первом хите (или близко к нему) вместо повторения, то у настоящих людей, которые заканчивают ту точку, было бы больше уверенности. Наверняка это было бы менее враждебно, чем текущая ситуация. Это могло бы сократить background-noise-ambient-bot-rate, это идет все время даже под нормальным Woot-прочь на обстоятельства. И боты отложили бы основную страницу и находились бы в очереди друг с другом (и все остальные), где они имеют преимущество.

<час> Хм... "Поточное квартирой" понятие приходит на ум. Интересно, полезен ли шаблон приблизительно? <час> полезное базовое понятие здесь является способностью, после первого экрана, отследить время общей суммы в очереди и смочь корректироваться к стандарту. Как стратегия смягчения бота, у Вас была бы определенная гибкость, чтобы, возможно, уклониться от очень самых ранних сессий на, возможно, 5-10 секунд; выполнение так, вероятно, было бы необнаруживаемым, но приведет к более богатому соединению покупки небота. Я уверен, что у Вас есть статистика, чтобы помочь оценить материал как это после факта. <час> Только для забавы, Вы могли (по крайней мере, для одного wootoff), соединяет Вашего собственного бота, который сочетает лучшие функции, которые Вы видели и затем раздаете его всем накануне. Затем по крайней мере все были бы одинаково вооружены. (Затем утка... поступающая...)
22
задан Vince 21 August 2009 в 21:39
поделиться

4 ответа

Простым решением может быть передача формы, которая расширяет modelform () на набор форм (а не на набор моделей).

Таким образом вы можете установить начальные значения в форме.

0
ответ дан 29 November 2019 в 05:24
поделиться

Я думаю, вы можете использовать начальный аргумент, как и в обычных наборах форм http://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset

0
ответ дан 29 November 2019 в 05:24
поделиться

It is still possible to pass initial to a ModelFormSet.

from django.forms.models import modelformset_factory
from example.models import ExampleModel

ExampleModelFormSet = modelformset_factory(ExampleModel)
formset = ExampleModelFormSet(initial=[{'name': 'Some Name'},
                                       {'name': 'Another Name'}])

If this is not what your after, can you explain your question more.

EDIT:

ExampleModelFormSet = modelformset_factory(ExampleModel, extra=2)
formset = ExampleModelFormSet(queryset=ExampleModel.objects.none(),
                              initial=[{'name': 'Some Name'},
                                       {'name': 'Another Name'}])
2
ответ дан 29 November 2019 в 05:24
поделиться

Вы передаете пустой набор запросов в ModelFormset.

ExampleModelFormSet = modelformset_factory(ExampleModel, extra=2)
formset = ExampleModelFormSet(queryset=ExampleModel.objects.none(),
                          initial=[{'name': 'Some Name'},
                                   {'name': 'Another Name'}])

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

И если я предполагаю, что вы передаете непустой набор запросов и все же хотите, чтобы ваши дополнительные формы были заполнены начальными значениями, вы можете переопределить Formset .

from django.forms.models import modelformset_factory  
ExampleFormset = modelformset_factory(OpenIDProfile, extra=3)

class myFormset(ExampleFormset):

    def _construct_form(self, i, **kwargs):
        """
        Instantiates and returns the i-th form instance in a formset.
        """
        if self.is_bound and i < self.initial_form_count():
            pk_key = "%s-%s" % (self.add_prefix(i), self.model._meta.pk.name)
            pk = self.data[pk_key]
            pk_field = self.model._meta.pk
            pk = pk_field.get_db_prep_lookup('exact', pk)
            if isinstance(pk, list):
                pk = pk[0]
            kwargs['instance'] = self._existing_object(pk)
        if i < self.initial_form_count() and not kwargs.get('instance'):
            kwargs['instance'] = self.get_queryset()[i]

        defaults = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
        if self.data or self.files:
            defaults['data'] = self.data
            defaults['files'] = self.files
        # Check to confirm we are not overwriting the database value.
        if not i in range(self.initial_form_count()) and self.initial:
            try:
                defaults['initial'] = self.initial[i - self.initial_form_count()]
            except IndexError:
                pass
        # Allow extra forms to be empty.
        if i >= self.initial_form_count():
            defaults['empty_permitted'] = True
        defaults.update(kwargs)
        form = self.form(**defaults)
        self.add_fields(form, i)        
        return form

Примечание: initial - это список диктовок. Желательно, чтобы количество пунктов в списке было в точности равным количеству дополнительных.

11
ответ дан 29 November 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: