Argh. Привет всем, у меня есть простой MUY Джанго вопрос:Django: как мне редактировать/обновлять модель?
И Argh, я извиняюсь, я читал и читать, и я уверен, это покрыто где-то супер-очевидно, но я не нашел Это!
Как отредактировать/обновить модель с помощью django? Например, значения данных? Не поля модели?
Вот мой код! (! Я использую версию самогона материала)
Вот это URLs:
url(r'^editStory/(?P<id>\d+)$',
StoryModelView.as_view(
context_object_name='form',
template_name ='stories/editStory.html',
success_template= 'stories/editStorySuccess.html'
),
{},
'editStory'
),
Здесь вы вид:
def get(self,request,id=None):
form = self.getForm(request,id)
return self.renderValidations(form)
def getForm(self, request,id):
if id:
return self.getModelById(request,id)
return StoryForm()
def getModelById(self,request,id):
theStory = get_object_or_404(Story, pk=id)
if theStory.user != request.user:
raise HttpResponseForbidden()
return StoryForm(theStory)
def renderValidations(self,form):
if self.context_object_name:
contextName = self.context_object_name
else:
contextName = 'form'
if self.template_name:
return render_to_response(self.template_name,{contextName:form})
else :
return render_to_response('stories/addStory.html',{contextName:form})
def getPostForm(self,request,id):
if id:
theStory = self.idHelper(request,id)
return StoryForm(request.POST,theStory)
return StoryForm(request.POST)
def processForm(self,form,request):
theStory = form.save(commit=False)
theStory.user = request.user
return theStory
Вот код шаблона:
{% block content %}
<h3>Edit story</h3>
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" value="Submit"/>
</form>
{% endblock %}
попробовать, как я мог бы, я либо:
- получить ошибку
- ничего не получить
я получаю сообщение об ошибке с кодом, как-дисплеем, вызванной этой линией
{% for field in form %}
и с погрешностью:
Caught AttributeError while rendering: 'Story' object has no attribute 'get'
или я не получаю ничего - никаких данных вообще - если я изменить мой метод «getModelById» читать:
def getModelById(self,request,id):
theStory = get_object_or_404(StoryForm, pk=id)
if theStory.user != request.user:
raise HttpResponseForbidden()
return theStory
StoryForm является одной из тех вещей «ModelForm», и его модель «история».
SO! Вопрос:
Как исправить этот код, чтобы он работал? Что я сделал не так?
Редактирование mixins - это то, что каждый говорит так, что ура для ответов - хотя я был совершенно неспособен найти учебник «Редактирование микширования для манекена», чтобы вести меня. В конце концов, я создал класс, который расширил View, и перезаписал методы get и post, чтобы внести изменения. Я могу опубликовать код позже и спросить «как мне преобразовать это в mixin». – bharal
Попробуйте еще раз взглянуть на общие представления docs. Они просто (за последние пару дней) полностью обновили его, поэтому его гораздо проще в использовании, поэтому теперь это может быть полезно. –