如何使用 Django 预填写表单?

问题描述 投票:0回答:1

我有一个带有餐厅实例的 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时,我仍然看到一个空表单

提前感谢您的帮助

python django django-crispy-forms
1个回答
0
投票

我不确定,但请尝试一下:

{% extends "base.html" %}
{% load static %}
{% load crispy_forms_tags %}  <!--Changed order!-->

{% block page_content %}
<!-- Leave everything as is -->
{% endblock %}

您可能无法从包含内容的块中加载脆标签。试一下,可能是错的。

© www.soinside.com 2019 - 2024. All rights reserved.