我想要一个模型ImpCalendar的表单(网页),以便我可以编辑它的数据。 网址应具有我在urls.py中设置的calendar_id(主键)
模型(ImpCalendar)具有场所的外键。我不在视图/表单中使用该外键,所以我不知道它是否相关。
如果我在views.py中这样做;
return render(request, 'importer/calendaredit.html', {'form': calendar})
我确实可以在页面上看到数据,但是看不到(编辑)表单。只是数据,而不是填写字段。
当我这样做
return render(request, 'importer/calendaredit.html', {'form': form})
对我来说听起来很合逻辑,但我得到了错误
django.urls.exceptions.NoReverseMatch: Reverse for 'calendaredit' with arguments '('',)' not found. 1 pattern(s) tried: ['importer\\/calendar\\/(?P<calendar_id>[0-9]+)\\/$']
在我看来,为calendar_id返回的值现在是Forms-data(html),它无法执行任何操作。但是我不知道我在做什么错。它必须处理html代码和传输到它的值,但是我是最后一个。
models.py
class Impcalendar(models.Model):
establishment = models.ForeignKey(Establishments, on_delete=SET_NULL, null=True)
url = models.CharField(max_length=255)
comment = models.CharField(max_length=255, null=True, blank=True)
status = models.IntegerField(null=True, blank=True)
def __str__(self):
return str(self.establishment)
forms.py
from django import forms
import datetime
from importer.models import Impcalendar, Establishments
class ImpcalendarForm(forms.ModelForm):
class Meta:
model = Impcalendar
fields = ['id', 'url']
urls.py
from django.urls import path
from importer import views
urlpatterns = [
path('', views.index, name='index'),
path('calendar/<int:calendar_id>/', views.calendaredit, name='calendaredit')
]
views.py
def calendaredit(request, calendar_id):
calendar = get_object_or_404(Impcalendar, pk=calendar_id)
print (calendar.url)
if request.method == 'POST':
form = ImpcalendarForm(request.POST, instance=calendar)
if form.is_valid():
calendar.save()
else:
form = ImpcalendarForm(request.POST or None, instance=calendar)
return render(request, 'importer/calendaredit.html', {'form': form})
calendaredit.html
{% extends 'importer/base.html' %}
{% block content %}
<h1>{{ form.id }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'calendaredit' form.id %}" method="post">
<div class="fieldWrapper">
{% csrf_token %}
{{ form.id }}
{{ form.url }}
</div>
<input type="submit" value="Save" />
</form>
{% endblock %}
答案 0 :(得分:0)
您需要同时传递 和它们的名称,并引用日历而不是表单。
return render(request, 'importer/calendaredit.html', {'form': form, 'calendar': calendar})
...
<form action="{% url 'calendaredit' calendar.id %}" method="post">