django - 唯一约束失败:accounts_user.username
问题描述
让我们来解决问题 我有一个页面,我希望用户在其中填写有关自己的信息,并且我想保存该数据。但我收到了这个错误。
IntegrityError at /accounts/profile/edit/1/change-profile/
UNIQUE constraint failed: 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)
推荐阅读
- machine-learning - 选择什么机器学习模型?
- arrays - Swift:获取多维数组第一叶的简单方法
- xamarin.forms - 用于 QR 扫描的 zxing 库的 NullPointerException(Android 应用 Xamarin Froms)
- android - MaterialAlertDialogBuilder 在自定义视图 editText 上崩溃
- php - WooCommerce:仅在结帐时显示大于 1 的产品数量
- python - 在 lambda 中找不到自制的 Python 包
- ruby - 通过 URL 导入到 Google 日历的活动显示为忙碌且私密
- bootstrap-4 - Bootstrap form is not clickable
- ios - 我怎样才能复制这个图像裁剪器?iOS
- c# - 测试起订量:System.NotSupportedException:不支持的表达式:c => c.Prices