UNIQUE 约束失败:groups_groupmember.group_id

我正在开发一个小型 django 项目,为此我创建了一项功能,允许用户创建然后加入该组。

现在,问题来了:

每当我离开小组并尝试重新加入它时,它都会显示我在问题中提到的错误

“唯一约束失败:groups_groupmember.group_id,groups_groupmember.user_id”

这是我的加入课程:

class JoinGroup(LoginRequiredMixin, generic.RedirectView):

    def get_redirect_url(self, *args, **kwargs):

        return reverse('groups:single', kwargs={'slug': self.kwargs.get('slug')})


    def get(self, request, *args, **kwargs):

        group = get_object_or_404(Group, slug=self.kwargs.get('slug'))


        from sqlite3 import IntegrityError

        try:

            # GroupMember.objects.create(group=group)

            GroupMember.objects.create(user=self.request.user, group=group)


        except IntegrityError:

            messages.warning(self.request, 'already a member!')


        else:

            messages.success(self.request, 'You are now a member!')


        return super().get(request, *args, **kwargs)



这是我的models.py


from django.db import models

from django.utils.text import slugify

from django.urls import reverse


# Create your models here.

# GROUPS MODELS.PY

import markdown


from django.contrib.auth import get_user_model  # returns user model that currently active in this project


User = get_user_model()


from django import template


register = template.Library()



class Group(models.Model):

    name = models.CharField(max_length=256, unique=True)

    slug = models.SlugField(allow_unicode=True, unique=True)

    description = models.TextField(blank=True, default='')

    description_html = models.TextField(editable=False, default='', blank=True)

    members = models.ManyToManyField(User, through='GroupMember')


    def __str__(self):

        return self.name


    def save(self, *args, **kwargs):

        self.slug = slugify(self.name)

        self.description_html = markdown.markdown(self.description)

        super().save(*args, **kwargs)


    def get_absolute_url(self):

        return reverse('groups:single', kwargs={'slug': self.slug})


    class Meta:

        ordering = ['name']

你能帮我解决这个问题吗?谢谢 !:)


郎朗坤
浏览 94回答 1
1回答

白衣非少年

使用怎么样get_or_createclass JoinGroup(LoginRequiredMixin, generic.RedirectView):    def get_redirect_url(self, *args, **kwargs):        return reverse('groups:single', kwargs={'slug': self.kwargs.get('slug')})    def get(self, request, *args, **kwargs):        group = get_object_or_404(Group, slug=self.kwargs.get('slug'))        _, created = GroupMember.objects.create(user=request.user, group=group)        if not created:            messages.warning(request, 'already a member!')        else:            messages.success(request, 'You are now a member!')        return super().get(request, *args, **kwargs)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python