2016-01-28 4 views
0

Это кажется глупой проблемой, но просто не уходите. Моя цель - сделать простой пост, обмен, комментарии, нравится и т. Д. Приложение. Большинство функций, похоже, отлично работают с публикацией и комментированием сообщения. Итак, у меня есть модель под названием UserPost и другая модель под названием Комментарии. Комментарий полевая модель имеет поле comment_liked_by которое ManytoMany отношение к Джанго пользователя Модели и это в основном для хранения пользователей, которые понравившиеся конкретный comment.This это мой models.py:-Django: Операционная ошибка при использовании поля ManytoMany

class UserPost(models.Model): 
post_created = models.DateTimeField(auto_now_add= True) 
post_last_edit = models.DateTimeField(auto_now=True) 
post_text_body = models.TextField(verbose_name='Share Yourself') 
post_user_handle = models.ForeignKey(User,verbose_name='Username',default=User,on_delete=models.CASCADE) 
post_share  = models.BooleanField(default=True,verbose_name='Public') 
#post_image  = models.ImageField(blank=True,verbose_name='Add a Photo') 
def __str__(self): 
    return (self.post_user_handle.first_name+" "+self.post_user_handle.last_name) 


def get_absolute_url(self): 
    return reverse('feedviews') 

class Meta: 
    verbose_name = "Latest Post" 
    verbose_name_plural = "Latest Posts" 
    ordering = ["-post_created"] 

class Comments(models.Model): 
comment_body = models.TextField(verbose_name="Add Comment") 
comment_likes = models.IntegerField(default= 0) 
comment_created = models.DateTimeField(auto_now=True) 
comment_user_handle = models.OneToOneField(User,default=User,related_name='Commented_by') 
comment_post = models.ForeignKey(UserPost,verbose_name='Post ID') 
comment_liked_by = models.ManyToManyField(User,related_name='Like_List') 

def __str__(self): 
    return (self.comment_user_handle.first_name+" "+self.comment_user_handle.last_name+"\n"+self.comment_body+"\n") 

class Meta: 
    verbose_name = "Latest Comment" 
    verbose_name_plural = "Latest Comments" 
    ordering = ["-comment_created"] 

В views.py I вызвать функцию, которая получает аргументы pOST_ID, comment_id и имя пользователя для идентификации комментария объект, который должен быть обновлен, когда пользователь любит comment.Here мой views.py: -

def LikeComment(request,username,post_id,comment_id): 
    user = User.objects.get(username=username) 
    post = UserPost.objects.get(post_user_handle=user,id=post_id) 
    comment = post.comments_set.get(id = comment_id) 
    comment.comment_liked_by.add(request.user) 
    comment.save() 
    return HttpResponseRedirect('/') 

проблема в том, каждый раз, когда я запускать сервер, и пользователь щелкает, добавляя request.user в набор комментариев_liked_by, я получаю Операционную ошибку без такой таблицы, называемой comment_ liked_by. Я выполнил makemigration и выполнил миграцию без проблем. Где я ошибаюсь? Связано ли отношение onetoone с моделью User и конфликтами Many to Many? Я попытался реализовать это с помощью внешнего ключа, но это кажется более сложным. Заранее спасибо.

+0

Попробуйте это в своей оболочке django, посмотрите, все ли это. Также попробуйте свою оболочку db и вручную проверьте, есть ли поле и имя правильное. –

ответ

0

Я не могу воспроизвести вашу ошибку, но я определил что-то странное. В комментариях модели поле comment_user_handle имеет значение по умолчанию, которое неверно. Я предлагаю удалить его.

Возможно, из-за этого Django не обновляет базу данных.

class Comments(models.Model): 
    comment_body = models.TextField(verbose_name="Add Comment") 
    comment_likes = models.IntegerField(default= 0) 
    comment_created = models.DateTimeField(auto_now=True) 
    **comment_user_handle = models.OneToOneField(User,related_name='Commented_by')** 
    comment_post = models.ForeignKey(UserPost,verbose_name='Post ID') 
    comment_liked_by = models.ManyToManyField(User,related_name='Like_List') 
+0

Без изменений после этого. Все равно получите ту же ошибку, что и таковая таблица comment_liked_by – Arindam

Смежные вопросы