繁体   English   中英

制作 django model 字段,该字段是指向不同应用程序中的 model 字段的外键,采用特定组中的用户数组

[英]making django model field that is a foreign key pointing to a model field in different app taking array of user in a specific group

我是 django rest 框架的新手,我想要实现的是创建一个 model 字段,它是一个外键并指向另一个应用程序 model 并获取他们的user_id (预定义的自动 id)

users\models.py

class user(models.Model):
    username = models.CharField(max_length=10, unique=True)
    name = models.CharField(max_length=64)
    creationtime = models.DateTimeField(auto_now_add=True)
    userdescription = models.CharField(max_length=250)
    
    def __str__(self) -> str:
        return self.username

teams\models.y

class team(models.Model):
    teamname = models.CharField(max_length=64)
    description = models.CharField(max_length=128)
    creationtime = models.DateTimeField(auto_now_add=True)
    admin = models.ForeignKey(user, related_name='admin', on_delete=models.CASCADE)
    members = models.ForeignKey(user, related_name='members', on_delete=models.CASCADE)

    def __str__(self) -> str:
        return self.teamname

所以我想要的是,当我在数据库中看到members列时,它应该显示一个user_id数组,如下所示:

members: [1,2,5,7,8]

这些数字指的是为每一行创建的自动索引,或者你知道当我们为特定的user_id发出 get 请求时,例如: https://localhost:8000/users/1/

先谢谢您的帮助。

您可以为多对多关系创建 go,因为它会创建和引用用户和团队的中间表

members = models.ManyToManyField(user,help_text='Select members for this team')

你应该以相反的方式进行。

每个用户都应该有一个带有 related_name = “members” 的团队字段(外键)。

然后如果你想得到团队的所有成员,你可以使用相关的名字。

(在 Django 中只有 manyToOne 而不是 OneToMany)

用户\模型.py

class user(models.Model):
   . . .

  team = models.ForeignKey(user, related_name='members', on_delete=models.CASCADE)

团队\模型.y

class team(models.Model):
    teamname = models.CharField(max_length=64)
    description = models.CharField(max_length=128)
    creationtime = models.DateTimeField(auto_now_add=True)
    admin = models.ForeignKey(user, related_name='admin', on_delete=models.CASCADE)
 

    def __str__(self) -> str:
        return self.teamname

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM