Skip to content
Advertisement

How to open detail view in editable format as shown in admin page?

I’m trying to show the user the details they entered in an editable format as we can see in

Edit:

Changed the code and tried to explain the question in a better way

view.py

def change_contact(request, contact_id):
    try:
        form = AddToPhoneBookForm(instance=Contact.objects.get(pk=contact_id))
        form.instance.user = request.user
        if form.is_valid():
            form.save()
            form = AddToPhoneBookForm()

        context = {
            'form': form
        }

        return render(request, "CallCenter/add_to_phone_book.html", context)

forms.py

class AddToPhoneBookForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['first_name', 'last_name', 'phone_number', 'phone_book']

This view loads the forms as I want it to but the changes made here is not reflected in the database. Where am I going wrong?

Advertisement

Answer

For this you need to use get() instead of filter() .Get returns the single object whereas filter will returns the queryset

contact = Contact.objects.get(phone_book__id=phone_book_id)

And in template you don’t need to use forloop {{contact.first_name}} will give the result for you

EDIT: you will save the data with POST request so you need to handle for POST request also and there are a lots of things you need to know please read the docs

And change your view like this

 def change_contact(request, contact_id):
        contact = Contact.objects.get(pk=contact_id)
        form = AddToPhoneBookForm(instance=contact)
        if request.method == 'POST':
            form = AddToPhoneBookForm(request.POST,instance=contact)        
            if form.is_valid():
               obj=form.save(commit=False)
               obj.user = request.user
               obj.save()
               return redirect('some-path')
        context = {
            'form': form,'contact':contact
        }

        return render(request, "CallCenter/add_to_phone_book.html", context)
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement