Обновление :Решение можно найти в виде отдельного ответа
Я делаю форму 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)