Форма Django :запрашивает подтверждение перед фиксацией в БД

Обновление :Решение можно найти в виде отдельного ответа

Я делаю форму Django, чтобы пользователи могли добавлять телешоу в мою базу данных. Для этого у меня есть модель Tvshow, модель TvshowModelForm, и я использую представления CreateTvshowView/UpdateTvshowViewна основе универсального класса -для создания формы.

Теперь моя проблема :позволяет сказать, что пользователь хочет добавить шоу в базу данных, например. Игра престолов. Если шоу с таким названием уже существует, я хочу запросить у пользователя подтверждение того, что это действительно другое шоу, чем то, которое находится в базе данных, и если подобного шоу не существует, я хочу зафиксировать его в базе данных. Как мне лучше всего обработать это подтверждение?

Некоторые из моих экспериментов показаны в коде ниже, но, возможно, я делаю это неправильно. Основой моего решения является включение скрытого поля force, которое должно быть установлено в 1, если пользователю будет предложено, если он уверен, что хочет зафиксировать эти данные,так что я могу прочитать, является ли эта вещь 1, чтобы решить, нажал ли пользователь кнопку «Отправить» еще раз, тем самым сообщив мне, что он хочет ее сохранить.

Я хотел бы услышать, что вы, ребята, думаете о том, как решить эту проблему.

просмотров.py

class TvshowModelForm(forms.ModelForm):
    force = forms.CharField(required=False, initial=0)
    def __init__(self, *args, **kwargs):
        super(TvshowModelForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Tvshow
        exclude = ('user')

class UpdateTvshowView(UpdateView):
    form_class = TvshowModelForm
    model = Tvshow
    template_name = "tvshow_form.html"

    #Only the user who added it should be allowed to edit
    def form_valid(self, form):
        self.object = form.save(commit=False)
        #Check for duplicates and similar results, raise an error/warning if one is found     
        dup_list = get_object_duplicates(Tvshow, title = self.object.title)
        if dup_list:
            messages.add_message(self.request, messages.WARNING, 
'A tv show with this name already exists. Are you sure this is not the same one? Click submit again once you\'re sure this is new content'
               )
#            Experiment 1, I don't know why this doesn't work
#            form.fields['force'] = forms.CharField(required=False, initial=1)

#            Experiment 2, does not work: cleaned_data is not used to generate the new form
#            if form.is_valid():
#                form.cleaned_data['force'] = 1

#            Experiment 3, does not work: querydict is immutable
#            form.data['force'] = u'1'

        if self.object.user != self.request.user:
            messages.add_message(self.request, messages.ERROR, 'Only the user who added this content is allowed to edit it.')

        if not messages.get_messages(self.request):
            return super(UpdateTvshowView, self).form_valid(form)
        else:
            return super(UpdateTvshowView, self).form_invalid(form)
5
задан tBuLi 11 August 2012 в 21:19
поделиться