Subrat
Subrat

Reputation: 990

Django. Contains 2 slightly different forms but second form's data being saved in both

Here are my lines dealing with the two forms :

user = request.user

user_liked = user_liked_form.save(commit = False)
user_liked.user = user
user_liked.save()

user_disliked = user_disliked_form.save(commit = False)
user_disliked.user = user
user_disliked.save()

The data submitted in second form is being saved in both liked and disliked.

I have used User foreignkey in both the liked and disliked models.

Here is the complete function :

def collect(request):
context = RequestContext(request)
submitted = False

if request.method == 'POST':
    data = request.POST
    user_liked_form = UserLikedForm(data = request.POST)
    user_disliked_form = UserDislikedForm(data = request.POST)
    # user_id = data["user_id"]
    user = request.user

    if user_liked_form.is_valid() and user_disliked_form.is_valid():


        # user_liked_form.save(commit = True)
        # user_disliked_form.save(commit = True)

        user_liked = user_liked_form.save(commit = False)
        user_liked.user = user
        user_liked.save()

        user_disliked = user_disliked_form.save(commit = False)
        user_disliked.user = user
        user_disliked.save()

        submitted = True

    else:
        print user_liked_form.errors, user_disliked_form.errors

else:
    user_liked_form = UserLikedForm()
    user_disliked_form = UserDislikedForm()

return render_to_response(
    'collect.html',
    {'user_liked_form': user_liked_form, 'user_disliked_form': user_disliked_form, 'submitted': submitted},
    context)

Upvotes: 0

Views: 45

Answers (1)

Rob Vezina
Rob Vezina

Reputation: 638

It sounds like your UserLikedForm and UserDislikedForm have the same field names and when the form is submitted, only the second value comes through in request.POST. To fix this, you will need to add a prefix to the forms:

user_liked_form = UserLikedForm(prefix='liked')
user_disliked_form = UserDislikedForm(prefix='disliked')

That way when the forms are rendered, each form will have unique field names.

Upvotes: 2

Related Questions