我有一个带有餐厅实例的 Django 应用程序。我希望我的用户能够更新餐厅。但是,当用户访问 update_restaurant.html 表单时,我希望预先填充该表单,这样如果用户只想编辑一个字段,则不需要重新填写所有其他字段。我正在使用脆皮形式。
restaurant_update.html:
{% extends "base.html" %}
{% load static %}
{% block page_content %}
{% load crispy_forms_tags %}
<div class="container">
<h1> Update {{ restaurant.name|title }}
</h1>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="Update Restaurant" class="btn btn-primary"/>
</form>
</div>
{% endblock %}
forms.py:
from django import forms
from .models import Restaurant, Comment
class RestaurantForm(forms.ModelForm):
class Meta:
model = Restaurant
fields = ['name', 'description', 'address', 'image']
models.py:
class Restaurant(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(max_length=1000)
address = models.CharField(max_length=100, blank=True)
image = CloudinaryField('image', null=True, blank=True)
created_by = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.name
views.py:
def restaurant_update(request, pk):
restaurant = get_object_or_404(Restaurant, pk=pk)
if not restaurant.user_can_delete(request.user):
return redirect('restaurant_detail', pk=pk)
if request.method == 'POST':
form = RestaurantForm(request.POST, request.FILES, instance=restaurant)
if form.is_valid():
form.save()
return redirect('restaurant_detail', pk=pk)
else:
form = RestaurantForm(instance=restaurant)
context = {
'restaurant': restaurant,
'form': form
}
return render(request, 'restaurant_update.html', context)
在我看来,我尝试使用Initial,但它不起作用。每当我去restaurant_update.html时,我仍然看到一个空表单
提前感谢您的帮助
我不确定,但请尝试一下:
{% extends "base.html" %}
{% load static %}
{% load crispy_forms_tags %} <!--Changed order!-->
{% block page_content %}
<!-- Leave everything as is -->
{% endblock %}
您可能无法从包含内容的块中加载脆标签。试一下,可能是错的。