2016-04-05 6 views
1

sein Wenn ich versuche, einen Autor zuweisen, oder Benutzer zu einem Post, spuckt Django die folgende Fehlermeldung aus:Python Django: „Post.author“ muss eine „User“ Instanz

Cannot assign "<User: henrydavidzhu>": "Post.author" must be a "User" instance. 

Hier sind meine Ansichten Py:

user_passes_test(lambda u: u.is_authenticated) 
def add_post(request): 
    form = PostForm(request.POST or None) 

    print("User: " + str(request.user)) 

    if form.is_valid() and request.user.is_authenticated(): 
     post = form.save(commit=False) 
     post.author = request.user 
     post.save() 
     return redirect(post) 
    else: 
     print(form.errors) 

    return render_to_response('webapp/startthread.html', 
           { 'form': form }, 
           context_instance=RequestContext(request)) 

Und hier ist mein forms.py:

class PostForm(forms.ModelForm): 
    CHOICES = (
     ('Hardware and OS', '&nbsp;&nbsp;&nbsp;&nbsp;Desktops'), 
    ) 
    field = forms.ChoiceField(choices=CHOICES) 

    class Meta: 
     model = Post 
     exclude = ['author', 'slug'] 

Und hier ist mein models.py:

class Post(models.Model): 
    title = models.CharField(max_length=500) 
    slug = models.SlugField(unique=True) 
    text = models.TextField() 
    created_on = models.DateTimeField(auto_now_add=True) 
    author = models.ForeignKey(User, unique=True) 

    def __unicode__(self): 
     return self.title 

    @models.permalink 
    def get_absolute_url(self): 
     return ('blog_post_detail',(), 
       { 
        'slug' :self.slug, 
       }) 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) 
     super(Post, self).save(*args, **kwargs) 
+1

Was ist die Art von 'request.user'? –

+0

@JohnGordon

+1

Das ist der Grund dann; 'Post.author' muss ein 'User'-Objekt sein, genau wie die Fehlermeldung besagt. –

Antwort

-1

ich django bin mit 1,8 und der Code ist für mich zu arbeiten. , wenn Ihre Website Login ist, geben request.user die Benutzerinstanz zum Beispiel:

print request.user 
0

Ich hatte folgendes zu ändern:

author = models.ForeignKey(User) 

dazu:

author = models.ForeignKey('auth.User') 
Verwandte Themen