Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何修复唯一约束字段_Python_Django - Fatal编程技术网

Python Django-如何修复唯一约束字段

Python Django-如何修复唯一约束字段,python,django,Python,Django,我正在做一个爱好项目,我有以下模型: from django.contrib.auth.models import User from django.db import models class Group(models.Model): name = models.CharField(blank=False, max_length=25) description = models.CharField(max_length=50, blank=True) user = m

我正在做一个爱好项目,我有以下模型:

from django.contrib.auth.models import User
from django.db import models

class Group(models.Model):
    name = models.CharField(blank=False, max_length=25)
    description = models.CharField(max_length=50, blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)

    def __str__(self):
        return self.name

    class Meta:
        ordering = ('name', )
        # my intention is that one user cannot have more than one group with the same name
        unique_together = ('name', 'user')
我想让用户能够使用这个基于类的通用视图创建新的组

from django.urls import reverse_lazy
from django.views import generic
from groups.models import Group

class GroupCreate(generic.CreateView):
    model = Group
    fields = [
        'name',
        'description'
    ]
    success_url = reverse_lazy('ideas:list')
    template_name = 'groups/group_create.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(GroupCreate, self).form_valid(form)
只要我不试图通过发送现有组的名称来出错,一切都会正常工作。但是如果我发送一个现有组的名称(同一个用户!),我会得到以下错误:

IntegrityError at /groups/create
UNIQUE constraint failed: groups_group.name, groups_group.user_id
为什么会发生这种情况?我如何修复它或捕捉错误


我使用的是Django 2.0.2,您可以在创建组时进行检查

from django.contrib import messages

def form_valid(self, form):
    form.instance.user = self.request.user
    name = form.cleaned_data['name']

    if Group.objects.filter(name=name, user=self.request.user).exists():
        messages.error(self.request, 'An Group with this name already exists.')
        return self.render_to_response(self.get_context_data(form=form))
    else:
        form.instance.name= name

    messages.success(self.request, 'Congratulations!! Your Group is created successfully.')
    return super(GroupCreate, self).form_valid(form)

发生这种情况的原因是您声明了一个约束:

unique_together = ('name', 'user')

只需删除此约束。

我不希望组的名称是唯一的。我希望它与用户一起是唯一的。因此,一个用户只能有一个同名的组。但是两个用户可以有任何同名的组。@Johnny,我已经更新了我的答案。看看吧,很高兴它起了作用。谢谢。我发现了一个bug,一行修复了。什么,你做了筛选(name=name,user=user)??