2016-04-05 11 views
1

При попытке назначить автора или пользователя на сообщение, Джанго извергает следующее сообщение об ошибке:Python Django: «Post.author» должен быть «Пользователь» экземпляр

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

Вот мои взгляды .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)) 

А вот мой 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'] 

А вот мой 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

Что такое тип 'request.user'? –

+0

@JohnGordon <класс django.utils.functional.SimpleLazyObject> –

+1

Вот почему; 'Post.author' должен быть объектом' User', как указано в сообщении об ошибке. –

ответ

-1

Я использую Django 1.8 и ваш код работает для меня. если ваш сайт Логин, request.user дать экземпляр пользователя , например:

print request.user 
0

я должен был изменить следующее:

author = models.ForeignKey(User) 

к этому:

author = models.ForeignKey('auth.User') 
Смежные вопросы