【发布时间】:2020-10-02 11:04:43
【问题描述】:
我试图让用户通过提交表单来保存特定锻炼的锻炼详情。我的 ExerciseDetailView 显示我想要的形式:
class ExerciseDetailView(DetailView):
model = Exercise
template_name = 'workouts/types.html'
def get_context_data(self, **kwargs):
context = super(ExerciseDetailView, self).get_context_data(**kwargs)
context['form'] = WorkoutModelForm
return context
但我的问题是将输入的数据保存在数据库中。我尝试过同时制作 FormView 和 CreateView 但显然缺少一些东西:
class ExerciseFormView(FormView):
form_class = WorkoutModelForm
success_url = 'workouts:exercise_detail'
def form_valid(self, form):
form.save()
return super(ExerciseFormView, self).form_valid(form)
这是我引用的 WorkoutModelForm:
class WorkoutModelForm(forms.ModelForm):
class Meta:
model = Workout
fields = ['weight', 'reps']
我的模板:
<form action="{% url 'workouts:workout' exercise.id %}" method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save</button>
</form>
网址:
path('exercise/<int:pk>/detail/', ExerciseDetailView.as_view(), name='exercise_detail'),
path('exercise/<int:pk>/detail/', ExerciseFormView.as_view(), name='workout'),
这里是我的锻炼模型,其中包含一个 get_absolute_url 方法:
class Workout(models.Model):
weight = models.FloatField(default=0)
reps = models.PositiveIntegerField(default=0)
created = models.DateField(auto_now_add=True)
updated = models.DateField(auto_now=True)
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, default=None)
def get_absolute_url(self):
return reverse('exercise_detail', args=[str(self.pk)])
我没有收到任何错误,但是当我提交表单时,我的 url 保持不变,正如我所希望的那样,但是页面只是显示为空白并且没有记录对象。谁能帮我看看是什么问题?
【问题讨论】:
-
网址完全重叠,所以它总是会采用第一个视图(
ExerciseDetailView)。