【发布时间】:2021-02-11 20:04:17
【问题描述】:
HTML 未提交 post 方法(我从 boostrap 工作室制作的模板)。我尝试在 views.py if method.request == 'POST: 中添加打印语句,但它不会通过 if 语句。问题是当我尝试保存表单中的输入时,它不会保存在数据库中。但是,当我尝试在 html(同一文件)中手动编码 <form>..</form> 时,django 会保存数据。以下是我认为与问题有关的代码:
views.py
def profile_settings(request):
user = request.user
data = Profile.objects.get(pk=user.id)
print("AA")
if request.method == 'POST':
print("AB")
form = ProfileDisplayForm(request.POST or None, request.FILES or None, instance=data)
print(request.POST)
if form.is_valid():
print(request.POST)
form.save()
else:
form = ProfileDisplayForm(instance=data)
context = {'form': form}
return render(request, 'main/profile_edit.html', context)
models.py
class Profile(models.Model):
account = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
age = models.IntegerField(blank=True, null=True, default="Not Set", validators=[MaxValueValidator(100), MinValueValidator(1)])
gender = models.CharField(max_length=6, choices=GENDER_CATEGORY, null=True, default="Not Set")
profile_image = models.ImageField(upload_to=get_profile_image_filepath, default='default.jpg', null=True)
def __str__(self):
return self.account.username
forms.py
class ProfileDisplayForm(ModelForm):
age = forms.IntegerField(widget=forms.NumberInput(attrs={'class': 'form-control',}))
class Meta:
model = Profile
fields = ('age', 'gender', 'profile_image')
html -->这是我从 bootstrap studio 得到的自定义代码,我认为是导致问题的原因
{% extends 'main/base.html' %}
{% block title %}
Profile Settings
{% endblock %}
{% block content %}
<div class="container profile profile-view" id="profile">
<div class="row">
<div class="col-md-12 alert-col relative">
<div class="alert alert-info absolue center" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<span>Profile save with success</span></div>
</div>
</div>
<form enctype="multipart/form-data" method="post">
{% csrf_token %}
<div class="form-row profile-row">
<div class="col-md-4 relative">
<div class="avatar">
<div class="avatar-bg center"></div>
</div>
</div>
<div class="col-md-8">
<h1>Profile </h1>
<hr>
<div class="form-row">
<div class="col-sm-12 col-md-6">
<div class="form-group"><label>Username:</label><div class="none" style="background-color: white; height: 40px; border-radius: 5px"> <h6 style="padding: 10px;">{{user.username}}</h6></div></div>
</div>
<div class="col-sm-12 col-md-6">
<div class="form-group"><label>Email:</label><div class="none" style="background-color: white; height: 40px; border-radius: 5px"> <h6 style="padding: 10px;">{{user.email}}</h6></div></div>
</div>
</div>
<div class="form-row">
<div class="col-sm-12 col-md-6">
<div class="form-group"><label>Age </label><input class="form-control" type="number" name="age" value="{{user.profile.age}}"></div>
</div>
<div class="col-sm-12 col-md-6">
<div class="form-group"><label>Gender</label>{{form.ghttps://stackoverflow.com/questions/ask#ender}}</div>
</div>
</div>
<hr>
<div class="form-row">
<div class="col-md-12 content-right">
<button class="btn btn-primary form-btn" type="submit">SAVE </button>
<a href="{% url 'home' %}"><button class="btn btn-danger form-btn" type="button">CANCEL </button></a></div>
</div>
</div>
</div>
</form>
</div>
{% endblock %}
【问题讨论】: