将关系添加到manytomayfield?

时间:2015-08-19 18:55:56

标签: python django many-to-many

views.py - 我试图转发(添加多对多的关系)给我的用户推文,但我一直得到以下错误。当我在管理员中添加关系时,它工作正常。它显示在我的模板上就好了但是当我尝试在我的视图中执行此操作时它似乎无法正常工作,我没有用Django做很多工作所以我需要一些认真的帮助我已经检查了文档和其他问题,但似乎找不到任何相关的东西。

- > ' RelatedManager'对象没有属性'转推'

  def retweet(request,user_id, tweet_id):
    logged_user = request.user.userprofile.tweet_set
    user_want_to_retweet = get_object_or_404(User, pk=user_id)
    user_profile_want_to_retweet = get_object_or_404(UserProfile, user=user_want_to_retweet)
    get_tweet = Tweet.objects.filter(userprofile=user_profile_want_to_retweet, id=tweet_id)
    add_retweet = logged_user.retweet.add(get_tweet)
    return HttpResponse('Retweeted')

models.py

 class Tweet(models.Model):
   userprofile = models.ForeignKey(UserProfile)
   tweets = models.TextField(max_length=120)
   retweet = models.ManyToManyField(UserProfile,   related_name='people_retweet', symmetrical=False, blank=True)
   date = models.DateTimeField()

urls.py

  url(r'^retweet/(?P<user_id>[\d]+)/(?P<tweet_id>[\d]+)/$', views.retweet, name='retweet')

我的模板 - combined_tweets只是一个组合列表,是我用于从三个单独的查询中获取所有条目(推文)的内容。我正在记录登录用户的推文,来自登录用户关注的人的推文以及登录用户转发的推文。但我不相信这就是问题所在。

     {% for combined_tweeters in combined_tweets %}
             <ul><strong>{{ combined_tweeters.userprofile.user }} | {{ combined_tweeters }} | {{ combined_tweeters.date }} |
             {% if combined_tweeters.userprofile.user == request.user %} <a href="{% url 'delete_tweet' user_id=combined_tweeters.userprofile.user.id tweet_id=combined_tweeters.id %}">Delete </a>
             {%else%} <a href='{% url "retweet" user_id=combined_tweeters.userprofile.user.id tweet_id=combined_tweeters.id %}'>Retweet</a> {% endif %}</strong></ul>
     {% endfor %}

1 个答案:

答案 0 :(得分:0)

原来这个问题出现在我的观点中,我认为这是错误的方式,所以这里的答案对于将来需要帮助的人来说,并且完全忽视上述问题中不需要的user_id,没有user_id是URL,模板它们都很好,反过来也是正确的。

views.py

 def retweet(request, tweet_id):
   logged_user = request.user.userprofile
   get_tweet = get_object_or_404(Tweet, pk=tweet_id)
   add_retweet = get_tweet.retweet.add(logged_user)
   return HttpResponse('Retweeted')