Поля ModelForm не заполняются предварительно существующими данными во время обновления в Django - PullRequest
0 голосов
/ 07 августа 2020

Я хочу обновить модель пользователя и лаборатории. Я могу видеть форму, но она не заполняется предварительно информацией о существующей базе данных даже после установки параметра экземпляра. Если я отправлю пустую форму, все поля будут сброшены на пустые значения в базе данных. Я пробовал несколько решений, доступных в Интернете, но ничего не работает.

Мои запросы -

  1. Как предварительно заполнить форму существующими данными?
  2. Если пользователь не заполняет конкретное поле, я хочу, чтобы предыдущая информация сохранялась как есть, а не как пустое значение. Как мне этого добиться?

У меня есть следующие models.py

class Lab(models.Model):
    uid = models.OneToOneField(User, on_delete=models.CASCADE)
    company=models.CharField(max_length=200,blank=True)

    @receiver(post_save, sender=User)
    def create_lab_profile(sender, instance, created, **kwargs):
        if created:
            Lab.objects.create(uid=instance)

    @receiver(post_save, sender=User)
    def save_lab_profile(sender, instance, **kwargs):
        instance.lab.save()

Forms.py

class UserForm(forms.ModelForm):
    email=forms.EmailField(max_length=300)

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email',)

class LabForm(forms.ModelForm):
    class Meta:
        model = Lab
        fields = ('company',)

views.py

@login_required
def update_user_details(request,pk):
    if request.method == 'POST':
        user_form = UserForm(request.POST,instance=request.user)
        lab_form = LabForm(request.POST,instance=request.user.lab)
        if user_form.is_valid() and lab_form.is_valid():
            user_form.save()
            lab_form.save()
            messages.success(request,'Your profile was successfully updated!')
            return redirect('user_details')
        else:
            messages.error(request,('Please correct the error below.'))
    else:
        user_form = UserForm(instance=request.user)
        lab_form = LabForm(instance=request.user.lab)
    return render(request, 'update_user_details.html', {'user_form': user_form,'lab_form': lab_form})

шаблон -

{% extends 'base.html' %}
{% block content %}
{% csrf_token %}

<H3> Update Personal information - </H3>
<br>
<form method="post"  enctype="multipart/form-data">
  {% csrf_token %}
  {{ user_form.as_p }}
  {{ lab_form.as_p }}
  <button type="submit" class="btn btn-primary">Save changes</button>
</form>

{% endblock %}

Любая помощь / предложения будут оценены!

...