在django中过滤用户并添加到现有组

时间:2016-12-30 10:06:30

标签: python django django-models django-views

我是Django的新手,我现在已经失败了一段时间了。我在Django文档中搜索了一些问题,但是没有什么对我有用。

以下是我的观点:

  def user_accept(request):
      if request.method == 'POST':
        username = AddUser.objects.filter(owner=request.user).get().user_request
        group_name = Projects.objects.filter(user=request.user).get().group_url
        group = Group.objects.get(name=group_name)
        group.user_set.add(username)
        delete_user = AddUser.objects.filter(user_request=username)
        delete_user.delete()

这是我的模特:

class AddUser(models.Model):
    owner = models.ForeignKey(User)
    title = models.CharField(max_length=20, default='', blank=True)
    user_request = models.CharField(max_length=30, default='')
    answer = models.BooleanField(default=False)

AddUser 模型用于用户请求访问特定项目。因此,当用户请求项目时,数据将保存到AddUser模型中。 用户字段设置为项目的“所有者”,因此我可以使用适当的所有者过滤每个项目。

如果所有者决定接受请求,则执行user_accept视图。这是问题,当我尝试将用户名添加到组中时,我收到以下错误:

invalid literal for int() with base 10: 'myusername'

我试图用int(用户名)转换用户名并尝试获取用户名的user_id但似乎没有任何工作......我认为我有一些事情要做我如何过滤我的对象,但我没有得到它。

非常感谢您的时间,祝新年快乐!

2 个答案:

答案 0 :(得分:1)

您需要用户ID或用户对象本身才能添加group.user_set.add的用户。

如果用户名是唯一的,则可以从用户名中检索用户对象,并添加:

user = User.objects.get(username=user_request)
group.user_set.add(user)

或者更改您的AddUser模型以通过 OneToOne 字段或 ForeignKey 而不是用户名存储请求者的ID。

答案 1 :(得分:0)

Django默认组不允许您添加用户名。 您必须添加用户对象。 试试

add_user_object = AddUser.objects.filter(owner=request.user).get()
group.user_set.add(add_user_object.owner)