更新到现有数据库不起作用
Update into existing database not working
我有一个页面,用户可以在其中添加新的 mco 号码,当用户单击“添加 mco”按钮时,它将检索 ID,如下所示:
但是当用户添加新的 mco 编号并单击提交按钮时,它会创建另一行并且不会更新到 id 数据库中,如下所示,为什么会这样,我该如何解决这个问题?
views.py
@login_required()
def AddMCO(request, id):
photo = get_object_or_404(Photo, id=id)
if request.method == "POST":
form = AddMCOForm(request.POST)
if form.is_valid():
mcoNum = form.cleaned_data['mcoNum']
form.save()
return redirect('ViewMCO')
else:
form = AddMCOForm()
context = {
"form": form,
"photo": photo
}
return render(request, 'AddMCO.html', context, )
forms.py
class AddMCOForm(forms.ModelForm):
mcoNum = forms.CharField(
label='Enter MCO Number',
widget=forms.TextInput(
attrs={
'class': 'form-control',
'placeholder': 'Please enter MCO Number here..'
}
)
)
class Meta:
model = Photo
fields = ("mcoNum",)
def __init__(self, *args, **kwargs):
super(AddMCOForm, self).__init__(*args, **kwargs)
self.fields['mcoNum'].widget.attrs.update({'class': 'form-control', 'placeholder': 'MCO Number'})
self.fields['mcoNum'].label = ''
self.fields['mcoNum'].help_text = ''
AddMCO.html
<!DOCTYPE html>
<html>
<head>
<script>
$(function () {
$("#datetimepicker1").datetimepicker();
});
</script>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>SCS Add MCO</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<!-- Font Awesome -->
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<!-- Moment.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js" integrity="sha256-VBLiveTKyUZMEzJd6z2mhfxIqz3ZATCuVMawPZGzIfA=" crossorigin="anonymous"></script>
<!-- Tempus Dominus Bootstrap 4 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.1.2/css/tempusdominus-bootstrap-4.min.css" integrity="sha256-XPTBwC3SBoWHSmKasAk01c08M6sIA5gF5+sRxqak2Qs=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.1.2/js/tempusdominus-bootstrap-4.min.js" integrity="sha256-z0oKYg6xiLq3yJGsp/LsY9XykbweQlHl42jHv2XTBz4=" crossorigin="anonymous"></script>
</head>
<body class="m-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-4">
<h3>Add MCO Number</h3>
<a href="{% url 'ViewMCO' %}" class="btn btn-dark my-3">Go Back</a>
<div class="card" style="width: 400px">
<form method="post">
{% csrf_token %}
<div class="form-group m-3">
<br>
{{ form.as_p}}
</div>
<button type='submit' class="btn btn-primary m-3">Submit</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
models.py
class Photo(models.Model):
STEP1 = "Reception"
STEP2 = "Launching"
STATUS = (
(STEP1, 'Reception'),
(STEP2, 'Launching'),
)
Datetime = models.DateTimeField(auto_now_add=True)
mcoNum = models.TextField() #mcoNum stand for MCO number
serialno = models.TextField() # serialno stand for serial number
partno = models.TextField() # partno stand for part number
reception = models.TextField()
Customername = models.TextField() #Custoner Name
status = models.CharField(max_length=20, choices=STATUS, default=STEP1, editable=False)
def __str__(self):
return self.reception
你没有提到Django版本和使用的数据库。
看看这是否对您有帮助。
假设照片模型将 addMCO Form 作为模型表单,您当然不会将实例传递给表单。
@login_required()
def AddMCO(request, id):
photo = get_object_or_404(Photo, id=id)
if request.method == "POST":
form = AddMCOForm(request.POST, instance=photo)
if form.is_valid():
mcoNum = form.cleaned_data['mcoNum']
form.save()
return redirect('ViewMCO')
else:
form = AddMCOForm(instance=photo)
context = {
"form": form,
"photo": photo
}
return render(request, 'AddMCO.html', context, )
我有一个页面,用户可以在其中添加新的 mco 号码,当用户单击“添加 mco”按钮时,它将检索 ID,如下所示:
但是当用户添加新的 mco 编号并单击提交按钮时,它会创建另一行并且不会更新到 id 数据库中,如下所示,为什么会这样,我该如何解决这个问题?
views.py
@login_required()
def AddMCO(request, id):
photo = get_object_or_404(Photo, id=id)
if request.method == "POST":
form = AddMCOForm(request.POST)
if form.is_valid():
mcoNum = form.cleaned_data['mcoNum']
form.save()
return redirect('ViewMCO')
else:
form = AddMCOForm()
context = {
"form": form,
"photo": photo
}
return render(request, 'AddMCO.html', context, )
forms.py
class AddMCOForm(forms.ModelForm):
mcoNum = forms.CharField(
label='Enter MCO Number',
widget=forms.TextInput(
attrs={
'class': 'form-control',
'placeholder': 'Please enter MCO Number here..'
}
)
)
class Meta:
model = Photo
fields = ("mcoNum",)
def __init__(self, *args, **kwargs):
super(AddMCOForm, self).__init__(*args, **kwargs)
self.fields['mcoNum'].widget.attrs.update({'class': 'form-control', 'placeholder': 'MCO Number'})
self.fields['mcoNum'].label = ''
self.fields['mcoNum'].help_text = ''
AddMCO.html
<!DOCTYPE html>
<html>
<head>
<script>
$(function () {
$("#datetimepicker1").datetimepicker();
});
</script>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>SCS Add MCO</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<!-- Font Awesome -->
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<!-- Moment.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js" integrity="sha256-VBLiveTKyUZMEzJd6z2mhfxIqz3ZATCuVMawPZGzIfA=" crossorigin="anonymous"></script>
<!-- Tempus Dominus Bootstrap 4 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.1.2/css/tempusdominus-bootstrap-4.min.css" integrity="sha256-XPTBwC3SBoWHSmKasAk01c08M6sIA5gF5+sRxqak2Qs=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.1.2/js/tempusdominus-bootstrap-4.min.js" integrity="sha256-z0oKYg6xiLq3yJGsp/LsY9XykbweQlHl42jHv2XTBz4=" crossorigin="anonymous"></script>
</head>
<body class="m-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-4">
<h3>Add MCO Number</h3>
<a href="{% url 'ViewMCO' %}" class="btn btn-dark my-3">Go Back</a>
<div class="card" style="width: 400px">
<form method="post">
{% csrf_token %}
<div class="form-group m-3">
<br>
{{ form.as_p}}
</div>
<button type='submit' class="btn btn-primary m-3">Submit</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
models.py
class Photo(models.Model):
STEP1 = "Reception"
STEP2 = "Launching"
STATUS = (
(STEP1, 'Reception'),
(STEP2, 'Launching'),
)
Datetime = models.DateTimeField(auto_now_add=True)
mcoNum = models.TextField() #mcoNum stand for MCO number
serialno = models.TextField() # serialno stand for serial number
partno = models.TextField() # partno stand for part number
reception = models.TextField()
Customername = models.TextField() #Custoner Name
status = models.CharField(max_length=20, choices=STATUS, default=STEP1, editable=False)
def __str__(self):
return self.reception
你没有提到Django版本和使用的数据库。
看看这是否对您有帮助。
假设照片模型将 addMCO Form 作为模型表单,您当然不会将实例传递给表单。
@login_required()
def AddMCO(request, id):
photo = get_object_or_404(Photo, id=id)
if request.method == "POST":
form = AddMCOForm(request.POST, instance=photo)
if form.is_valid():
mcoNum = form.cleaned_data['mcoNum']
form.save()
return redirect('ViewMCO')
else:
form = AddMCOForm(instance=photo)
context = {
"form": form,
"photo": photo
}
return render(request, 'AddMCO.html', context, )