我想用通用视图updateview更新一个对象。当我编辑一个对象时,问题就出现了。我没有得到预先填好的表格,而是拿到了一张空白表格。
我的模板:
{% extends 'base.html' %}
{% block content %}
<div class="container">
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-danger" type="submit" value="Update" />
<a href="{% url 'display_targetbehavior' %}" class="btn btn-default">Take me back</a>
</form>
</div>
{% endblock %}
在我的视图.py在
^{pr2}$我的型号:
class Habit(models.Model):
AFTER = 'After I'
WHEN = 'When I'
WHENEVER = 'Whenever I'
BEFORE = 'Before I'
MEANWHILE = 'Meanwhile I'
TRIGGER_CHOICES = (
(AFTER, 'After I'),
(WHEN, 'When I'),
(WHENEVER, 'Whenever I'),
(BEFORE, 'Before I'),
(MEANWHILE, 'Meanwhile I'),
)
title = models.CharField(max_length=200)
trigger = models.CharField(max_length=15, choices=TRIGGER_CHOICES, default=AFTER)
existingroutine = models.ForeignKey(
'Existingroutine',
on_delete=models.SET_NULL,
blank=True,
null = True,
)
targetbehavior = models.ForeignKey(
'Targetbehavior',
on_delete=models.SET_NULL,
blank=True,
null = True,
)
image = models.ImageField(upload_to='habit_image', blank=True)
created_by = models.ForeignKey(UserProfile, on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(default=datetime.now, blank=True)
def __str__(self):
habitpresentation = self.title# + '\n ' + self.trigger + '\n ' + str(self.existingroutine) + '\n ' + str(self.targetbehavior)
return habitpresentation
def image_url(self):
#print(self.image.url)
if self.image and hasattr(self.image, 'url'):
return self.image.url
else:
return None;
…在我的表单.py在
class HabitForm(forms.ModelForm):
class Meta:
model = Habit
fields = ( 'title', 'trigger', 'existingroutine', 'targetbehavior', 'image')
def save(self, commit=True):
habit = super(HabitForm, self).save(commit=False)
habit.title = self.cleaned_data['title']
habit.trigger = self.cleaned_data['trigger']
habit.existingroutine = self.cleaned_data['existingroutine']
habit.targetbehavior = self.cleaned_data['targetbehavior']
habit.image = self.cleaned_data['image']
if commit:
habit.save()
编辑 网址.py公司名称:
from django.conf.urls import include, url
从习惯导入视图作为习惯视图
urlpatterns = [
url(r'^$', habits_views.display_habits, name='display_habits'),
url(r'^habit/details/(?P<id>\w{0,50})/$', habits_views.display_habit_details, name='display_habit_details'),
url(r'^habit/details/(?P<id>\w{0,50})/delete/$', habits_views.delete_habit, name='delete_habit'),
#url(r'^habit/details/update/(?P<id>\w{0,50})/$', habits_views.update_habit, name='update_habit'),
url(r'^habit/details/update/(?P<pk>\w{0,50})/$', habits_views.HabitUpdate.as_view(), name='update_habit'),
url(r'^habit/create-habit/$', habits_views.create_habit, name='create_habit'),
url(r'^existingroutines/$', habits_views.display_existing_routines, name='display_existing_routines'),
url(r'^existingroutines/create/$', habits_views.create_existing_routine, name='create_existing_routine'),
url(r'^existingroutines/select/(?P<id>\w{0,50})/$', habits_views.select_existing_routine, name='select_existing_routine'),
url(r'^existingroutines/update/(?P<pk>\w{0,50})/$', habits_views.ExistingroutineUpdate.as_view(), name='update_existing_routine'),
url(r'^existingroutines/delete/(?P<pk>\w{0,50})/$', habits_views.ExistingroutineDelete.as_view(), name='delete_existing_routine'),
url(r'^targetbehavior/$', habits_views.display_targetbehavior, name='display_targetbehavior'),
url(r'^targetbehavior/create/$', habits_views.create_targetbehavior, name='create_targetbehavior'),
url(r'^targetbehavior/select/(?P<id>\w{0,50})/$', habits_views.select_targetbehavior, name='select_targetbehavior'),
url(r'^targetbehavior/update/(?P<pk>\w{0,50})/$', habits_views.TargetbehaviorUpdate.as_view(), name='update_targetbehavior'),
url(r'^targetbehavior/delete/(?P<pk>\w{0,50})/$', habits_views.TargetbehaviorDelete.as_view(), name='delete_targetbehavior'),
]
通过这个网址,我将更新习惯:
url(r'^habit/details/update/(?P<pk>\w{0,50})/$', habits_views.HabitUpdate.as_view(), name='update_habit'),
有什么建议吗?在
我认为您的
UpdateView
没有为模板返回正确的对象。你试过这个吗:而您只需要在
^{2}$forms.py
文件中使用这个:相关问题 更多 >
编程相关推荐