创建不使用多对多关系的用户与好友的模式?

0 投票
2 回答
565 浏览
提问于 2025-04-16 11:16

我正在开发我的第一个Django应用,想要为它创建模型,但在建立我认为应该很简单的模型关系时遇到了困难。我想创建一个用户模型,包含一些常见的属性,比如用户名、密码(当然是加密的)、加入日期等等。然后,我希望能够将这个用户与他们在网站上的所有朋友或关注者关联起来。但我卡住的地方是,如何设置这种关系,因为一个用户可以有很多朋友。我可以用用户表的主键来关联,但我该如何为朋友表创建一个模型,让用户表的主键同时起到两个作用:一是指向用户,二是指向他们所有朋友的主键呢?

 from django.db import models

class User(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=200)
    dateJoined = models.DateField('date joined')

class Friends(models.Model):
    user = models.ForeignKey(User)

2 个回答

0
CREATE TABLE friends (user_id int, friend_id int)

这两列都提到了用户的ID。我对Django模型不太了解,不过根据你的代码,我猜它可能长这样:

class Friends(models.Model):
    user = models.ForeignKey(User)
    friend = models.ForeignKey(User)
2

首先,我建议你不要自己创建用户模型,而是使用Django自带的那个。它已经包含了你需要的所有字段。

其次,我还建议你创建一个“个人资料”模型,把朋友的信息存储在里面。你可以在这里了解什么是个人资料:http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users

第三,在你的个人资料模型中,我建议添加一个朋友字段,具体可以参考这里的示例:http://docs.djangoproject.com/en/1.2/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

然后你可以通过 user.get_profile().friends.all() 来获取某个用户的朋友列表。虽然这个写法有点长,但能让代码保持整洁。

撰写回答