问题描述
我有一个要从另一个页面发送数据的表单。数据肯定在发送,因为我有一个基于FK填充的测试模板标签,但表单本身不会填充数据。
models.py
class Project(models.Model):
curr_choices = (
('USD','USD'),('GBP','GBP'),('EUR','EUR'),)
production_title = models.CharField(max_length=200,unique=True)
budget = models.FloatField()
currency = models.CharField(max_length=3,choices=curr_choices,default='USD')
distributor = models.CharField(max_length=200)
image = models.ImageField(null=True,blank=True,upload_to="static/images")
proj_media = models.CharField(max_length=200)
licencee = models.CharField(max_length=200)
rating = models.CharField(max_length=20)
release_date = models.DateField()
synopsis = models.TextField()
term = models.CharField(max_length=20)
territory = models.CharField(max_length=20)
writer_spot = models.CharField(max_length=200)
user = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.production_title
views.py
def update_project(request,pk):
update = Project.objects.get(id=pk)
if request.method == "POST":
form = ProjectForm(request.POST,request.FILES,instance=update)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
return redirect('projects')
else:
form = ProjectForm()
context = {
'form': form,'update': update
}
return render(request,"projectsync/create_project.html",context)
forms.py
class ProjectForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
PrependedText('production_title',"",placeholder="Example Title"),PrependedText('licencee',placeholder="Example Licencee"),PrependedText('distributor',placeholder="Example distributor"),PrependedText('writer_spot',placeholder="Example Writer of Spot"),PrependedText('synopsis',placeholder="Example Synopsis"),Row(
Column('currency',css_class='form-group col-md-2 mb-0'),Column(PrependedAppendedText('budget','.00'),css_class='form-group col-md-10 mb-0'),css_class='form-row'
),Row(
Column(PrependedText('term',placeholder="Perpetuity"),css_class='form-group col-md-6 mb-0'),Column(PrependedText('proj_media',placeholder="TV"),css_class='form-group col-md-4 mb-0'),Column(PrependedText('rating',placeholder="PG-13"),Row(
Column(PrependedText('release_date',placeholder="DD/MM/YYYY"),Column(PrependedText('territory',placeholder="Worldwide"),Column('image',Submit('submit','Create')
)
class Meta:
model = Project
fields = (
'production_title','licencee','distributor','writer_spot','synopsis','budget','currency','term','proj_media','rating','release_date','territory','image')
labels = {
'proj_media':'Media'
}
html-模板标签{{update.production_title}}正在填充,但{{crispy form}}未填充
{% extends 'projectsync/base.html' %}
{% load crispy_forms_tags %}
{% block title%}
Create Project
{% endblock %}
{% block content %}
<div class="container-fluid">
<!-- Page heading -->
<h1 class="h3 mb-2 text-gray-800">New Project {{update.production_title}}</h1>
<br>
<div class="card shadow mb-4">
<div class="card-body">
{% csrf_token %}
{% crispy form %}
</div>
</div>
</div>
</br>
</br>
{% endblock %}
似乎无法弄清楚我哪里出了问题。
谢谢!
解决方法
在您的HTML模板中,它是{{form | crispy}}
,将实例添加到else语句中
return self.production_title
views.py
def update_project(request,pk):
update = Project.objects.get(id=pk)
if request.method == "POST":
form = ProjectForm(request.POST,request.FILES,instance=update)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
return redirect('projects')
else:
form = ProjectForm(instance=update)
context = {
'form': form,'update': update
}
return render(request,"projectsync/create_project.html",context)