2016-04-25 4 views
0

sind gerettet werden hier meine Linien Umgang mit den zwei Formen:Django. Enthält 2 leicht unterschiedliche Formen, aber zweite Form der Daten in beide

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() 

Die Daten in der zweiten Form vorgelegt werden, in beide gerettet gemocht und unbeliebt.

Ich habe Benutzer Fremdschlüssel in den beliebten und nicht gefallenen Modellen verwendet. Hier

ist die komplette Funktion:

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) 
+0

Ich habe Benutzer als Fremdschlüssel in beiden Modellen. – jakeN

+1

Warum überspringst du nicht den 'view' Code? In der Regel verwendet Django für eine Seite eine einzelne Option, es sei denn, Sie verwenden ein 'Formset'. Das ist wahrscheinlich der Grund. –

Antwort

2

Es klingt wie Ihr UserLikedForm und UserDislikedForm haben die gleichen Feldnamen und wenn das Formular abgeschickt wird, wird nur der zweite Wert kommt durch die in request.POST. Um dies zu beheben, müssen Sie einen Präfix zu den Formen hinzuzufügen:

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

Auf diese Weise, wenn die Formen wiedergegeben werden, wird jede Form eindeutige Feldnamen haben.

+1

Setzen Sie das Präfix in gebundener und ungebundener Form: 'user_liked_form = UserLikedForm (request.POST, Präfix = 'liked')', 'user_liked_form = UserLikedForm (prefix = 'liked')'. – vsd

Verwandte Themen