【问题标题】:How to update one-to-one relationship model?如何更新一对一的关系模型?
【发布时间】:2017-04-23 04:36:53
【问题描述】:

我有一个与用户具有一对一关系的模型。我创建了一个创建模型的表单,但如果再次提交该表单,它会给出“UNIQUE 约束失败”。我怎样才能使数据得到更新而不是尝试创建新数据?

models.py

class Userprofile (models.Model):
    user = models.OneToOneField(User, related_name='profile', primary_key=True,)
    address = models.CharField(max_length=100)
    zip = models.CharField(max_length=100)

forms.py

class Profile(forms.ModelForm):
    class Meta:
        model = Userprofile
        fields = ['address', 'zip']

views.py

def changeprofile(request):
    form = Profile(request.POST or None, request.FILES or None)
    if form.is_valid():
        profile = form.save(commit=False)
        profile.user = request.user
        profile.save()
        return render(request, 'myaccount.html', {"Profile":form})

【问题讨论】:

  • 这个问题在stackoverflow.com/questions/36637697/…得到了回答
  • 我已经尝试过了,它给了我无效的 int() 字面值,基数为 10:当我尝试 c = Userprofile.objects.get(user= request.user)

标签: python django


【解决方案1】:

您收到此错误UNIQUE constraint failed,因为您试图再次创建一个新用户,该用户已存在于 Userprofile 表中 OneToOne 字段将始终检查用户在表中是否唯一 Userprofile.

因此,如果您想更新个人资料。你的视图应该是这样的:

views.py

from django.shortcuts import get_object_or_404

def changeprofile(request):
    profile_instance = get_object_or_404(Userprofile, user=request.user)
    form = Profile(request.POST or None, request.FILES or None, instance=profile_instance)
    if form.is_valid():
        profile = form.save(commit=False)
        profile.save()
        return render(request, 'myaccount.html', {"Profile":form})

urls.py

url(r'^update-profile/$', views.changeprofile, name="changeprofile"),

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2022-01-23
    • 2020-03-09
    • 1970-01-01
    • 2023-01-31
    • 2021-07-09
    相关资源
    最近更新 更多