如何从 Django 中的数据库中删除单个数据(不删除整行)
How to delete a single data from database in django (not deleting the entire row)
为了让您了解我的问题,我先展示我的代码,然后再展示我的问题。
在models.py中:
class Post(models.Model):
content = models.CharField(max_length=140)
date_created = models.DateTimeField(auto_now_add=True)
poster = models.ForeignKey(User, on_delete=models.CASCADE)
likes = models.IntegerField(default=0)
liked_by = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='liked_by', blank=True, null=True)
def serialize(self):
return {
"id": self.id,
"poster": self.poster.username,
"poster_image_url": self.poster.image_url,
"date_created": self.date_created.strftime("%b %d %Y, %I:%M %p"),
"content": self.content,
"likes": self.likes,}
在views.py中:
@csrf_exempt
def get_post(request, post_id):
post = Post.objects.get(pk=post_id)
if request.method == "GET":
return JsonResponse(post.serialize())
elif request.method == "PUT":
data = json.loads(request.body)
if data.get('likes') is not None:
if data['likes'] > post.likes:
post.likes = data['likes']
post.liked_by = request.user
else:
post.likes = data['likes']
post.liked_by.remove(request.user)
post.save()
return HttpResponse(status=204)
我需要从 [=][=][=] 的 liked_by
列中删除 request.user
14=] 对象。
但是出现这个错误:
AttributeError: 'User' object has no attribute 'remove'
我该如何解决这个问题?
您可以将字段值设置为 None,这实际上会删除 post 模型实例与用户模型之间的关联。
您不需要 request.user,因为关系是多对一的(post 模型实例只能与一个用户相关)。
post.liked_by = None
post.save()
为了让您了解我的问题,我先展示我的代码,然后再展示我的问题。
在models.py中:
class Post(models.Model):
content = models.CharField(max_length=140)
date_created = models.DateTimeField(auto_now_add=True)
poster = models.ForeignKey(User, on_delete=models.CASCADE)
likes = models.IntegerField(default=0)
liked_by = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='liked_by', blank=True, null=True)
def serialize(self):
return {
"id": self.id,
"poster": self.poster.username,
"poster_image_url": self.poster.image_url,
"date_created": self.date_created.strftime("%b %d %Y, %I:%M %p"),
"content": self.content,
"likes": self.likes,}
在views.py中:
@csrf_exempt
def get_post(request, post_id):
post = Post.objects.get(pk=post_id)
if request.method == "GET":
return JsonResponse(post.serialize())
elif request.method == "PUT":
data = json.loads(request.body)
if data.get('likes') is not None:
if data['likes'] > post.likes:
post.likes = data['likes']
post.liked_by = request.user
else:
post.likes = data['likes']
post.liked_by.remove(request.user)
post.save()
return HttpResponse(status=204)
我需要从 [=][=][=] 的 liked_by
列中删除 request.user
14=] 对象。
但是出现这个错误:
AttributeError: 'User' object has no attribute 'remove'
我该如何解决这个问题?
您可以将字段值设置为 None,这实际上会删除 post 模型实例与用户模型之间的关联。
您不需要 request.user,因为关系是多对一的(post 模型实例只能与一个用户相关)。
post.liked_by = None
post.save()