脆皮表格未填充主键数据
crispy form not populating with data from primary key
我有一个表单,我想从另一个页面向其发送数据。数据确实在发送,因为我有一个基于 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"), css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
Row(
Column(PrependedText('release_date', "", placeholder="DD/MM/YYYY"), css_class='form-group col-md-4 mb-0'),
Column(PrependedText('territory', "", placeholder="Worldwide"), css_class='form-group col-md-4 mb-0'),
Column('image', css_class='form-group col-md-4 mb-0'),
css_class='form-row'
),
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)
我有一个表单,我想从另一个页面向其发送数据。数据确实在发送,因为我有一个基于 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"), css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
Row(
Column(PrependedText('release_date', "", placeholder="DD/MM/YYYY"), css_class='form-group col-md-4 mb-0'),
Column(PrependedText('territory', "", placeholder="Worldwide"), css_class='form-group col-md-4 mb-0'),
Column('image', css_class='form-group col-md-4 mb-0'),
css_class='form-row'
),
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)