【问题标题】:Unique constraint failed - Integrity error - django唯一约束失败 - 完整性错误 - django
【发布时间】:2020-04-21 20:46:49
【问题描述】:

无法在线找到我的问题的解决方案。我收到有关问题的错误消息 ----- IntegrityError at /add_user_address/ UNIQUE 约束失败:users_useraddress.user_id ------ 非常感谢所有帮助!

views.py 重新导入

from django.urls import reverse
from django.shortcuts import render, redirect, Http404, HttpResponseRedirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User

from .forms import UserRegisterForm, UserAddressForm 
from .models import EmailConfirmed


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Your registration has been successful! Please check your email to confirm account.')
            return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})

SHA1_RE = re.compile('^[a-f0-9]{40}$')

def activation_view(request, activation_key):
    if SHA1_RE.search(activation_key):
        print("activation key is real")
        try:
            instance = EmailConfirmed.objects.get(activation_key=activation_key)
        except EmailConfirmed.DoesNotExist:
            instance = None
            messages.success(request, f'There was an error with your request.')
            return HttpResponseRedirect("/")
        if instance is not None and not instance.confirmed:
            page_message = "Confirmation successful, welcome to Fuisce! "
            instance.confirmed = True
            instance.activation_key = "Confirmed"
            instance.save()
        elif instance is not None and instance.confirmed:
            page_message = "Already Confirmed"
        else:
            page_message = ""

        context = {"page_message": page_message}
        return render(request, "users/activation_complete.html", context)
    else:
        raise Http404



@login_required
def profile(request):
    return render(request, 'users/profile.html')




**def add_user_address(request):
    print(request.GET)  
    try:
        redirect = request.GET.get("redirect")
    except:
        redirect = None
    if request.method == "POST":
        form = UserAddressForm(request.POST) 
        if form.is_valid():
            new_address = form.save(commit=False)
            new_address.user = request.user
            new_address.save()
            if redirect is not None:
                return HttpResponseRedirect(reverse(str(redirect)))

    else:
        raise Http404**

html 文件

{% extends "fuisce/base.html" %}

{% block content %}

<form method="POST" action='{% url "add_user_address" %}?redirect=checkout'>{% csrf_token %}

{{ address_form.as_p }}

<input type='submit' class='btn btn-primary' value='Add Address'/>

</form> 


{% endblock content %}

我的 html 和视图文件已附上,如果需要其他任何东西来解决问题,请告诉我。

from django.db import models
from django.core.mail import send_mail
from django.contrib.auth.models import User
from django.conf import settings
from django.template.loader import render_to_string
from django.urls import reverse

from localflavor.ie.ie_counties import IE_COUNTY_CHOICES

class UserAddress(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    address = models.CharField(max_length=150 )
    address2 = models.CharField(max_length=150, null=True, blank=True)
    city = models.CharField(max_length=100, null=True, blank=True)
    county = models.CharField(max_length=100, choices=IE_COUNTY_CHOICES)
    country = models.CharField(max_length=100)
    postalcode = models.CharField(max_length=30)
    phone = models.CharField(max_length=60)
    shipping = models.BooleanField(default=True)
    billing = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __str__(self):
        return str(self.user.username)

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    添加您的模型文件 - 唯一约束与您的数据库模型相关联。可能您在模型属性“unique=True”中添加一个字段。

    【讨论】:

    • 感谢您的回复。我将我的 models.py 文件添加到我的问题的底部是与“order_id”相关的问题,因为它有一个 unique=True 值?
    • 不,问题出在模型用户上,您可以看到错误:users_useraddress.user_id。您的模型中的“用户地址”是什么?是字段还是“直通”表?
    • 哦,我的错,我已经在我的用户地址模型中编辑了这个问题。我应该在这里添加一个独特的价值吗?
    • User_id 作为主键是唯一的,不要添加任何东西。问题在这里:user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)。一个用户只能拥有一个模型用户地址的实例。如果您已经为该用户在数据库中保存了某项内容,则无法保存更多内容。
    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多