【问题标题】:Django model designing problem when creating a follower / following relationship创建追随者/追随者关系时的Django模型设计问题
【发布时间】:2021-02-18 06:49:36
【问题描述】:

我正在尝试为我的应用程序创建一个关注系统,当我认为它有效时,我意识到当账户 a 开始关注账户 b 时,账户 b 也开始关注账户 a

我的模型:

from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    followers = models.ManyToManyField('self', blank=True, related_name='followers')
    following = models.ManyToManyField('self', blank=True, related_name='following')

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='p_author')
    body = models.TextField(max_length=500)
    time = models.TextField() #Added when creating object with the API
    likes = models.IntegerField(default=0)

    def serialize(self):
        return {
            'id': self.id,
            'author': self.author.username,
            'body': self.body,
            'time': self.time,
            'likes': self.likes
        }

class Comment(models.Model):
    post_commented = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='c_post')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='c_author')
    body = models.TextField(max_length=500)
    time = models.TextField() #Added when creating object with the API
    likes = models.IntegerField(default=0)

处理跟随动作的视图(通过 JS fetch 调用):

ef follow(request, profile_name):
    user_object = User.objects.get(username=profile_name)
    
    if request.method == 'PUT':
        print(request.user)
        data = json.loads(request.body)

        if data.get('follow') == True:
            followers_set = user_object.followers
            followers_set.add(request.user)
            user_object.save()
            return JsonResponse({'status': 'success'}, status=204)

我想我需要重组我的整个数据库和项目来修复这个错误,你建议我怎么做?

【问题讨论】:

    标签: python django sqlite django-models


    【解决方案1】:

    只需在两个用户模型属性上添加symmetric=False 即可,Django 默认在多字段上具有对称关系,如here 所述

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2021-10-09
      • 2017-12-08
      • 1970-01-01
      • 2021-11-25
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多