蟒。姜戈。更新视图类"No file was submitted. Check the encoding type on the form"错误



我是Django的新手。我希望你能帮我解决这个错误;未提交任何文件。检查表单"上的编码类型;。我读过几个关于stackoverflow的问题,但缺少";save(("在views.py中的函数中,或者方法"不存在";post";,或不存在";csrf_token";在HTML中。但是我使用UpdateView类和方法";张贴";以及";csrf_token";包含在HTML文件中。我不知道问题出在哪里。

这是一个博客服务,具有添加/更新/删除城市和火车的功能。我使用CreateView/UpdateView/DeleteView类。有关城市和火车的信息存储在链接表中。在";城市;应用程序(views.py(工作没有问题,相同的类复制到";火车";该应用程序不适用于通过网站上的表单创建和更改数据。它在页面上出现了一个错误:";没有发送任何文件。检查表单"的编码类型;。

同时,删除在网站上正常工作。并通过管理面板正确创建/更新/删除工作。

已经为";火车";应用程序。这两个应用程序都在settings.py.中注册

请告诉我:哪里可能有问题?提前谢谢。

views.py

class TrainListView(ListView):
paginate_by = 4
model = Train
template_name = "trains/trains.html"

class TrainDetailView(DetailView):
queryset = Train.objects.all()
template_name = "trains/detail.html"

class TrainCreateView(SuccessMessageMixin, CreateView):
model = Train
form_class = TrainForm
template_name = "trains/create.html"
success_url = reverse_lazy("trains:trains")
success_message = "Train has been created"

class TrainUpdateView(SuccessMessageMixin, UpdateView):
model = Train
form_class = TrainForm
template_name = "trains/update.html"
success_url = reverse_lazy("trains:trains")
success_message = "Train has been updated"

class TrainDeleteView(DeleteView):
model = Train
template_name = "trains/delete.html"
success_url = reverse_lazy("trains:trains")
def get(self, request, *args, **kwargs):
messages.success(request, "Train has been deleted")
return self.post(request, *args, **kwargs)

forms.py

class TrainForm(forms.ModelForm):
name = forms.CharField(label="Train",
widget=forms.TextInput(attrs={
"class": "form-control",
"placeholder": "Input train name"
}))
travel_time = forms.ImageField(label="Travel time",
widget=forms.NumberInput(attrs={
"class": "form-control",
"placeholder": "Input travel time"
}))
departure_city = forms.ModelChoiceField(label="Departure city",
queryset=City.objects.all(),
widget=forms.Select(attrs={
"class": "form-control",
}))
destination_city = forms.ModelChoiceField(label="Destination city",
queryset=City.objects.all(),
widget=forms.Select(attrs={
"class": "form-control",
}))
class Meta:
model = Train
fields = "__all__"

型号.py

class Train(models.Model):
name = models.CharField(max_length=50, unique=True, verbose_name="Train")
travel_time = models.PositiveSmallIntegerField(verbose_name="Travel time")
departure_city = models.ForeignKey(City, on_delete=models.CASCADE,
related_name="departure_city_set",
verbose_name="Departure city"
)
destination_city = models.ForeignKey("cities.City", on_delete=models.CASCADE,
related_name="destination_city_set",
verbose_name="Destination city"
)
def __str__(self):
return f'Train {self.name} from {self.departure_city} to {self.destination_city}'
class Meta:
verbose_name = "Train"
verbose_name_plural = "Trains"
ordering = ["name"]
def clean(self):
if self.departure_city == self.destination_city:
raise ValidationError("Departure city and destination city can't be the same")
qs = Train.objects.filter(departure_city=self.departure_city,
destination_city=self.destination_city,
travel_time=self.travel_time,
).exclude(pk=self.id)
if qs.exists():
raise ValidationError("Change travel time")
def save(self, *args, **kwargs):
self.clean()
super().save(*args, **kwargs)

trains/update.html

{% extends 'main/base.html' %}
{% block title %} Train update {% endblock %}
{% block content %}
<h1>Train update</h1>
{% include "main/form.html" with button="Update" %}
{% endblock %}

main/form.html

<div class="row">
<div class="col-md-4">
<form action="{{action}}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-info">{{ button }}</button>
</form>
</div>
</div>

urls.py

app_name = "trains"
urlpatterns = [
path('', TrainListView.as_view(), name="trains"),
path('<int:pk>/', TrainDetailView.as_view(), name="detail"),
path('create/', TrainCreateView.as_view(), name="create"),
path('<int:pk>/update/', TrainUpdateView.as_view(), name="update"),
path('<int:pk>/delete/', TrainDeleteView.as_view(), name="delete"),
]

在您的forms.py中,travel_time应该是ImageField吗?这似乎就是它期望提交文件的原因。

相关内容

最新更新