django - UNIQUE 约束失败 : accounts_user. 用户名

标签 django django-models django-forms django-views

我们来解决问题吧 我有一个页面,我希望用户在其中填写有关自己的信息,并且我想保存该数据。但我收到此错误。

/accounts/profile/edit/1/change-profile/处出现完整性错误 UNIQUE 约束失败:accounts_user.username

这是我的观点.py

def change_profile(request, pk):
    form = ChangeProfile(request.POST or None)
    user_ = request.user
    if request.method == "POST":
        if form.is_valid():
            form.save()
            return redirect("/accounts/profile/edit/{}/".format(user_.pk))
    args = {'form': form}
    return render(request, 'change_profile.html', args)

我的模型.py

class GradeUser(models.Model):
    grade = models.CharField(max_length=20, null=True)

class Country(models.Model):
    country = models.CharField(max_length=30, null=True)

class User(AbstractBaseUser):
    email = models.EmailField(
        verbose_name = 'email address',
        max_length=255,
        unique=True
        )
    real_name = models.CharField(max_length=20, blank=True)
    username = models.CharField(max_length=40, unique=True, verbose_name='username')
    grade = models.ForeignKey(GradeUser, on_delete=models.CASCADE, blank=True, null=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, blank=True, null=True)
    reputation = models.IntegerField(default=0)
    image = models.ImageField(upload_to='accounts/media', blank=True)
    about_me = models.TextField()


    USERNAME_FIELD= 'email'
    REQUIRED_FIELDS = ['username']

    objects = UserManager()

表单.py

class ChangeProfile(forms.ModelForm):
    class Meta:
        model = User
        fields = ('real_name', 'grade', 'country', 'about_me')

究竟出了什么问题?

为什么需要用户的用户名?

我应该用它做什么来保存?

最佳答案

您的目标是对您的用户(已存在)执行更新,但在这里您正在创建一个没有用户名属性的全新用户实例,这就是生成错误的原因。 尝试此代码:它获取您当前的用户并使用表单提供的信息更新它。

PS:我没有修改有关返回的任何内容,因为我不知道你在那里做什么,但请注意,你不需要通过参数传递用户 pk,用户数据已经存储在请求对象中。

def change_profile(request, pk):
form = ChangeProfile()
user_ = request.user
if request.method == "POST":
    form = ChangeProfile(request.POST)
    if form.is_valid():
        user_new_info=form.save(commit=false)
        user_.real_name = user_new_info.real_name
        user_.grade = user_new_info.grade
        user_.country = user_new_info.country
        user_.about_me = user_new_info.about_me
        user_.save()
        return redirect("/accounts/profile/edit/{}/".format(user_.pk))
args = {'form': form}
return render(request, 'change_profile.html', args)

关于django - UNIQUE 约束失败 : accounts_user. 用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51898206/

相关文章:

python - Django 模型字段中的详细名称和 help_text 的用途是什么?

python - gunicorn 状态处于事件状态(已退出)但显示未在 monit 中运行

python - 遍历django模板中的json数据

python - 客户端排序查询集,Django + TwitterBoostrap

python - 在Django自定义用户管理器中,create_user和_create_user()之间的区别?

python - 从 django-admin 中选择另一个外键来过滤外键字段?

python - Django 表单无法识别模型属性

python - 如何初始化表单中字段的值以在模板中进行编辑

django - 如何使 RadioSelect 将图像作为单选值?

Django 模型形式 : How to override or check for "save_as"