2016-06-12 18 views
0

Ich habe eine Frage zu einem neuen Projekt, das ich erstelle. Um es einfach auszudrücken, die Website verfügt über Benutzerkonten, und jeder Benutzer hat die Möglichkeit, einen einfachen Absatz zu erstellen. Das Formular funktioniert einwandfrei, aber ich kann nicht scheinen, die Benutzer-ID dem gespeicherten Formular zuzuweisen.Modellform mit Benutzer-ID speichern?

model.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 

class Thoughts(models.Model): 
    user = models.ForeignKey(UserProfile, null=True) 
    title = models.CharField(max_length=150, default='') 
    description = models.CharField(max_length=5000, default='') 

forms.py

class ThoughtForm(ModelForm): 
    class Meta: 
     model = Thoughts 
     fields = ['title', 'description'] 

views.py

@login_required(login_url='sign_in') 
def add_thought(request): 
    context = {} 
    populateContext(request, context) 

    user_details = UserProfile.objects.get(user=request.user) 
    context.update(user_details=user_details) 

    if request.method == 'POST': 
    new_thought_form = ThoughtForm(request.POST) 

     if new_thought_form.is_valid(): 
      new_thought_form.save() 
      return HttpResponse('Hurray, saved!') 
    else: 
     new_thought_form = ThoughtForm() 


    c = {'new_thought_form': new_thought_form,} 
    c.update(csrf(request)) 

    return render_to_response('lala/add_new_thought.html', c) 

Immer, wenn ich "instance = user_details.id" Versuchen Sie, heißt es, dass die Das Objekt 'int' hat kein Attribut '_meta'. Irgendwelche Gedanken?

Antwort

3

Sie können die Modelle vereinfachen, indem die UserProfile Modell entfernen:

# models.py 

class Thoughts(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    title = models.CharField(max_length=150, default='') 
    description = models.CharField(max_length=5000, default='') 

Ihr forms.py gut aussieht.

Ihre Ansichten ändern:

# views.py  

@login_required(login_url='sign_in') 
def add_thought(request): 
    if request.method == 'POST': 
     form = ThoughtForm(request.POST) 
     if form.is_valid(): 
      thought = form.save(commit=False) 
      thought.user = request.user 
      thought.save() 
      return HttpResponse('Hurray, saved!') 
    else: 
     form = ThoughtForm() 
    return render(request, 'lala/add_new_thought.html', { 
     'form': form 
    }) 
+0

Works! Vielen Dank Flowfree! – Bob