I wish to update a record in Django using a form, but instead it creates a new record. I know it has to do with using get(), but I don’t know how to fix it. Here is the relevant code:
my form:
class AddRecordForm(forms.ModelForm):
class Meta:
model = Model2
fields = ('field1', 'field2')
my Models:
class Model2(models.Model):
id = models.CharField(primary_key=True, max_length=12)
created_at = models.DateTimeField(auto_now_add=True)
field3 = models.ForeignKey(Model3, on_delete=models.PROTECT, related_name='master')
field4 = models.PositiveSmallIntegerField()
class Meta:
ordering = ['id']
def __str__(self):
return(f"{self.field3} ")
class Model1(models.Model):
field1 = models.ForeignKey(Model2, on_delete=models.PROTECT, related_name='list')
created_at = models.DateTimeField(auto_now_add=True)
field2 = models.PositiveSmallIntegerField(null=True, blank=True)
and my view:
def update_record(request, pk):
record = Model2.objects.get(field2=pk)
form = AddRecordForm(instance=record)
if request.method == 'POST':
form = AddRecordForm(request.POST, instance=record)
if form.is_valid():
form.save()
messages.success(request, "Record updated successfully!")
return render(request, 'home', {})
context = {'form':form}
return render(request, 'update_record.html', context)
Any help would be very much appreciated. Thanks.