首页 > 解决方案 > Django - 与用户组相关的另一个模型的新记录

问题描述

我希望在另一个模型中创建新记录时,它会自动与另一个模型中的每个用户相关联。

示例:我有 3 个模型: - 事件 - 参与者 - 用户

添加新事件时,您必须将所有用户添加到参与者列表中。

我知道我可以用一个循环来做到这一点,但我想知道在 django 中是否有另一种方式,例如

'''model Participants ''' 

Class participants(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    event = models.ForeignKey(Event,on_delete=models.CASCADE)

''' view '''
    event = Events.objects.get (id = instance.id)
    participants = Participants (event = event, user = User.objects.all ())
    participants.save ()

标签: pythondjango

解决方案


DjangoManyToManyField为此提供了字段

Class participants(models.Model):
    user = models.ManyToManyField(User,blank=True)
    # It's suggested to use plural: users = ....
    event = models.ForeignKey(Event,on_delete=models.CASCADE)

在您看来,您会这样做:

event = Events.objects.get (id = instance.id)
participants = Participants (event = event)
participants.save()
participants.user.add(*User.objects.all())

您不能将它与User直到participants已保存:不要忘记位置参数 **在 queryset 之前*User.objects.all(),如果没有,Django 将引发错误

或者更好:

participants = Participants.object.create(event = Events.objects.get (id = instance.id))
participants.user.add(*User.objects.all())

如果你想知道 Django 的幕后花絮,看看这个


推荐阅读