2016-08-03 13 views
1

Nachdem eine ModelForm eingereicht wurde, wie kann ich eine Fremdschlüsselbeziehung hinzufügen, so dass es überprüft?django hinzufügen Fremdschlüsselwert nach Formular senden

models.py

class Comment(models.Model): 
    id = models.AutoField(primary_key=True) 
    activity = models.ForeignKey(Activity) 
    submitter = models.ForeignKey(User) 

    creation_date = models.DateTimeField(auto_now_add=True) 
    content = models.TextField() 

forms.py

class CommentForm(forms.ModelForm): 
    content = forms.CharField(widget=forms.Textarea) 

    class Meta: 
     model = Comment 

views.py

def index(request, id=None): 
    activity_instance = Activity.objects.get(pk=1) 
    submitter_instance = User.objects.get(id=1) 

    newComment = CommentForm(request.POST) 
    newComment.activity = activity_instance 
    newComment.submitter = submitter_instance 

    if newComment.is_valid():  # <-- false, which is the problem 

Antwort

5

Ich glaube, Sie Formularinstanz mit Modellinstanz Vermischung. Ihr newComment ist ein Formular, andere Objekte als Formularattribut zuzuordnen wird das Formular nicht zum Speichern des Fremdschlüssels machen (nicht sicher, wo Sie diese Verwendung gefunden haben), da alle Formulardaten in form.data gespeichert sind, was eine dict wie Datenstruktur ist.

Ich bin nicht sicher, wie Ihr Formular aussieht, weil Sie die Fremdschlüssel nicht ausgeschlossen haben, so dass sie als Dropdown-Menüs gerendert werden sollten und Sie sie auswählen können. Wenn Sie den Fremdschlüssel wählen den Benutzer nicht wollen, aber wählen Sie die Werte zuweisen, wie Sie derzeit tun, sollten Sie sie in Form ausschließen, so würde form.is_valid() passieren:

class CommentForm(forms.ModelForm): 
    content = forms.CharField(widget=forms.Textarea) 

    class Meta: 
     model = Comment 
     exclude = ('activity', 'submitter') 

views.py

def index(request, id=None): 
    activity_instance = Activity.objects.get(pk=1) 
    submitter_instance = User.objects.get(id=1) 

    comment_form = CommentForm(request.POST) 
    if comment_form.is_valid(): 
     new_comment = comment_form.save(commit=False) 
     new_comment.activity = activity_instance 
     new_comment.submitter = submitter_instance 
     new_comment.save() 

Django doc about save() method.

+0

Vielen Dank, sehr klar und hilfreich. – smilebomb

Verwandte Themen