Я пытаюсь создать простую форму для редактирования профиля для пользователей на веб-сайте. Я следил за стандартным советом по обновлению, в документах говорится, что Django обнаруживает первичный ключ экземпляров и знает обновлять вместо вставки.Django: обновление моделей, новый экземпляр, созданный вместо обновленного
только проблема есть, я получаю вставку, когда пытаюсь обновить. Я предварительно заполнил форму экземпляром модели (экземпляр, который я пытаюсь редактировать), но когда я попытаюсь сохранить его, я получаю новый экземпляр. Когда я добавляю строку «force_update = True», я получаю сообщение об ошибке, которое сообщает мне, что первичный ключ не обнаружен. Не уверен, почему, поскольку im pre заполняет форму экземпляром модели, хотя, очевидно, pk не является частью формы. есть что-то им не хватает?
некоторый код:
модель:
class profile(models.Model):
user = models.ForeignKey(User)
first_name = models.CharField(max_length=20, null=True)
last_name = models.CharField(max_length=20, null=True)
DOB = models.DateField(null=True)
age = models.IntegerField(null=True)
public_email = models.EmailField(null=True)
county = models.CharField(max_length=20, null=True)
town = models.CharField(max_length=30, null=True)
форма:
class profileForm(forms.ModelForm):
class Meta:
model = profile
exclude = ['user']
вид:
@login_required()
def edit_profile(request):
if request.POST:
proform = profileForm(request.POST)
if proform.is_valid():
prof = proform.save(False)
prof.user = request.user
prof.save(force_update=True)
return HttpResponseRedirect('/accounts/view_profile/')
else:
c = {}
if profile.objects.filter(user=request.user).exists():
prof = profile.objects.get(user=request.user)
c['proform'] = profileForm(instance=prof)
else:
c['proform'] = profileForm()
return render(request, 'edit_profile.html', c)
любая помощь очень ценится!