如何查询要删除的单个对象而不是整个查询列表?

时间:2015-08-12 13:39:51

标签: python django

我可以删除用户的帖子(推文),但当我这样做时,最终会删除所有该用户的推文,而我只想一次删除一个,我认为这与该方式有关我正在查询用户的推文,但我不确定。我正在使用Django 1.8。

models.py

from django.db import models
from django.contrib.auth.models import User
import tagging
from tagging.registry import register as tagging_
import os


def get_image_path(instance, filename):
    return os.path.join('photos', str(instance.user.id), filename)


class UserProfile(models.Model):
    user = models.OneToOneField(User)
    bio = models.CharField(max_length=120, blank=True, verbose_name='Biography')
    follows = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True) #reverse related relations, or through
    theme = models.ImageField(upload_to=get_image_path, blank=True)
    profile_picture = models.ImageField(upload_to=get_image_path, blank=True) 


   def __str__(self):
      return self.bio

class Tweet(models.Model):
    userprofile = models.ForeignKey(UserProfile)
    tweets = models.TextField(max_length=120)
    date = models.DateTimeField()



    def json_feat(self):
     return{
      'title': self.tweets,
     }


def __str__(self):
    return self.tweets

tagging_(Tweet)

views.py

def delete_tweet(request, user_id):
    data = {'You deleted your tweet'}
    user = get_object_or_404(User, pk=user_id)
    user_profile = get_object_or_404(UserProfile, user=user)
    get_users_tweets = Tweet.objects.filter(userprofile=user_profile)
    remove_tweet = get_users_tweets.delete()
    return JsonResponse(data, safe=False)

模板

   {% for tweets in tweet %}
     {{ tweets.userprofile.user }} | {{ tweets }} | {{ tweets.date }} | <a href='{% url 'delete_tweet' user_id=user.id %}'>Delete </a> <br />
   {% endfor %}

网址

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

2 个答案:

答案 0 :(得分:2)

get_users_tweets = Tweet.objects.filter(userprofile=user_profile)

将为您提供指定用户编写的所有推文 - &gt;所有这些都被删除了。你想删除哪一个?你需要指定。

修改

(在指定OP想要在评论中做什么之后)

网址更新为:

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

...以及您的 views.py

def delete_tweet(request, tweet_id):
    data = {'You deleted your tweet.'}
    tweet = Tweet.objects.filter(pk=tweet_id)
    tweet.delete()
    return JsonResponse(data, safe=False)

答案 1 :(得分:1)

您需要在网址中添加推文ID

def delete_tweet(request, user_id,tweet_id):
    data = {'You deleted your tweet'}
    user = get_object_or_404(User, pk=user_id)
    user_profile = get_object_or_404(UserProfile, user=user)
    get_users_tweets = Tweet.objects.filter(userprofile_id=user_id,id=tweet_id)
    remove_tweet = get_users_tweets.delete()
    return JsonResponse(data, safe=False)

然后您的视图将如下所示

cabal repl

这将删除有关该用户的特定推文。