0

我正在构建一个 GroupApp,我正在尝试在 premium_members( ManyToManyField) 中添加一些组成员。

问题 :-

但是当我点击add_premium_member该组帖子的用户时。然后帖子创建者没有添加premium_members。没有错误显示。但不添加。

模型.py


# For Group Creation

class Group(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30,default='')
    premium_members = models.ManyToManyField(User, related_name='premium_members', blank=True)

网址.py

    path('add_premium/<int:pk>/', views.add_premium, name='add_premium'),

视图.py


# For add post creater in premium_members.

def add_premium(request,pk):
    group = get_object_or_404(Group,pk=pk)
    user = get_object_or_404(User,pk=pk)
    group.premium_members.add(user)
    return redirect('home')

追溯

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/add_premium/3/
Raised by:  app.views.add_premium

我通过更改实例名称尝试了很多次,get method但对我没有任何效果,仍然没有添加没有错误的用户。

4

1 回答 1

1

如果您希望将用户添加到组中,则需要执行以下操作

group_detail_view.html

<b>Post Creater :</b> {{ post.user }}<a href="{% url 'add_premium' user.id data.id %}">Add to Premium Members</a>

在这里,您将传递数据作为组实例的上下文对象。您还可以从 post.group.id (而不是 data.id)获取组的 id 下一步让我们调整视图..

def add_premium(request,pk, group_id):
    try:
        group = Group.objects.get(pk=group_id)
    except Group.DoesNotExist:
        group = Group.objects.create(title='New Group')
    user = get_object_or_404(User,pk=pk)
    group.premium_members.add(user)
    group.save() # add this
    return redirect('home')

get_object_or_404 很方便,但可能很棘手。您可能不希望提出一个未找到的页面,而是创建一个用户应该分开的组。似乎这里的逻辑是用户应该始终是一个组的一部分,所以 404 会很糟糕。

现在为网址..

    path('group_detail_view/<int:pk>/', views.group_detail_view,name='group_detail_view'),

    path('add_premium/<int:pk>/<int:group_id>/', views.add_premium, name='add_premium'),

现在我们更新了 url 来查找用户 ID 和组 ID

于 2021-06-20T03:49:46.473 回答