我正在使用Django的UpdateView(1.5.8)来更新我的数据库中的对象。我编辑问题对象并点击提交;它没有给我任何错误,但它也没有更新问题。
我在views.py中有我的QuestionUpdate类,它扩展到UpdateView:
class QuestionUpdate(UpdateView):
model = Question
form_class = QuestionForm
success_url = '.'
def get_context_data(self, **kwargs):
context = super(QuestionUpdate, self).get_context_data(**kwargs)
return context
我用urls.py调用QuestionUpdate:
url(r'^question/(?P<pk>\d+)/$',QuestionUpdate.as_view(), name='question_update', ),
在模板中,我使用Bootstrap form-group。我显示一个文本区域,其默认值是原始问题。 这是我的模板(我只复制相关部分 - 表格):
<form action = "" method ="post"> {% csrf_token %}
<div class='form-group'>
<label>Question</label>
<textarea class='form-control' rows="3">{{question}}</textarea>
</div>
<input type = 'submit' value = 'Submit' />
</form>
我找到了this,但它并没有给我这么多帮助。我错过了什么?
我怀疑有两件事:
当我用updateview显示问题时,我将pk传递给url。我在网址上使用 reverse()看到了一些UpdateView示例。我不知道我是否需要它或为什么需要它。那可能是问题?
在我的表单中,我只显示question_text,但问题模型中还有其他字段。我是否因为&#39; 隐藏字段而感到麻烦&#39;?
编辑: 以下是问题模型和QuestionForm模型表单:
models.py:
class Question(models.Model):
question_text = models.TextField()
question_type = models.CharField(choices = Option_type, max_length = 64)
calculate = models.CharField(choices=Calculation, blank = True, max_length = 64)
ordering = models.IntegerField()
scale_id = models.IntegerField()
scale = models.ForeignKey(Scale)
max_score_of_question = models.IntegerField()
showQues = models.IntegerField(default = 1)
def __unicode__(self):
return self.question_text
forms.py
class QuestionForm(ModelForm):
class Meta:
model = Question
# fields = ('question_text',)
答案 0 :(得分:1)
问题是您有列scale_id
和scale
。请参阅 - 如果有ForeignKey
,它还会生成一个名为列+后缀_id
的属性,在这种情况下,scale_id
会与已经存在的列scale_id
发生冲突
只需重命名或删除其中一个。