【问题标题】:Foreign Key Constraint Failed Django with UUID使用 UUID 的外键约束失败 Django
【发布时间】:2022-12-03 22:10:48
【问题描述】:

尝试使用外键保存到表中,但出现 IntegrityError:外键约束失败。我已经检查以确保我获得了我的外键的正确数据并且它似乎在那里。我不确定为什么会收到此错误。

模型.py

class IPHold(models.Model):
    uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
    CHOICES = [
        ('1', 'Book'),
        ('2', 'Documentary'),
        ('3', 'Graphic Novel/Comic'),
        ('4', 'Journalism'),
        ('5', 'Merchandise'),
        ('6', 'Podcast'),
        ('7', 'Stage Play/Musical'),
        ('8', 'Video Game'),
    ]
    media_type = models.CharField(max_length=1, choices=CHOICES, blank=False)
    title = models.CharField(max_length=255, blank=False)
    author_creator = models.CharField(max_length=255, blank=True)
    production_company = models.CharField(max_length=255, blank=True)

class RoleHold(models.Model):
    ip = models.ForeignKey(IPHold, on_delete=models.CASCADE, related_name='ip_role')
    name = models.CharField(max_length=128, blank=False)
    TYPE = [
        ('1', 'Lead'),
        ('2', 'Supporting'),
    ]
    role_type = models.CharField(max_length=1, choices=TYPE, blank=True)
    age_min = models.PositiveSmallIntegerField(blank=True)
    age_max = models.PositiveSmallIntegerField(blank=True)
    ETHNICITY = [
        ('1', 'American Indian or Alaska Native'),
        ('2', 'Asian'),
        ('3', 'Black or African American'),
        ('4', 'Hispanic or Latino'),
        ('5', 'Native Hawaiian or Other Pacific Islander'),
        ('6', 'White'),
        ('7', 'Unknown/Irrelevant'),
    ]
    race = models.CharField(max_length=1, choices=ETHNICITY, blank=True)
    GENDEROPTIONS = [
        ('1', 'Male'),
        ('2', 'Female'),
        ('3', 'N/A'),
        ('4', 'Unknown/Irrelevant'),
    ]
    gender = models.CharField(max_length=1, choices=GENDEROPTIONS, blank=True)
    description = models.TextField(blank=True)

视图.py

def add_characters(request):
    id = request.GET.get('id')
    ips = IPHold.objects.get(uuid=id)
    form = forms.AddCharacter
    context = {
        'form':form,
    }
    if request.method == 'POST':
        ip = ips
        name = request.POST.get('name')
        role_type = request.POST.get('role_type')
        age_min = request.POST.get('age_min')
        age_max = request.POST.get('age_max')
        race = request.POST.get('race')
        gender = request.POST.get('gender')
        description = request.POST.get('description')
        role_save = RoleHold(ip=ip, name=name, role_type=role_type, age_min=age_min,
                        age_max=age_max, race=race, gender=gender, description=description)
        role_save.save()
        if request.POST.get('add') == 'Add Another Role':
            return redirect('/iphold/add_characters/?id=' + str(ips.uuid))
        else:
            return(render, 'iphold/pay.html')
    return render(request, 'iphold/add_characters.html', context)

我收到的错误是 /iphold/add_characters/ 处的 IntegrityError

FOREIGN KEY 约束失败。当我打印(ip)时,它显示对象在那里。

【问题讨论】:

    标签: django foreign-keys


    【解决方案1】:

    由于这一行,我得到了同样的错误:ips = IPHold.objects.get(uuid=id). 试图从字符串打印变量:id = request.GET.get('id'),它返回无。 在我看来,这一行是不需要的,在表单中你可以从下拉列表中选择 uuid。

    简化了您的提交并尝试在表单中输入数据并提交。数据记录在数据库中。

    视图.py

    from django.http import HttpResponse
    from .models import *
    from .forms import *
    
    def add_characters(request):
        if request.method == 'POST':
            form = AddCharacter(request.POST)
            if form.is_valid():
                form.save()
                return render(request, 'tem_form.html', {'form': form})
            else:
                return HttpResponse("Invalid data")
        else:
            form = AddCharacter()
            return render(request, 'tem_form.html', {'form': form})
    

    表单.py

    from django.forms import ModelForm
    from django import forms
    from .models import *
    
    class AddCharacter(ModelForm):
        class Meta:
            model = RoleHold
            fields = '__all__'
    

    网址.py

    from django.urls import path
    from .views import *
    
    urlpatterns = [
        path('add_characters/', add_characters, name='add_characters'),
    ]
    

    模板

    <form method="post" action="{% url 'add_characters' %}">
          {% csrf_token %}
          {{ form.as_p }}
          <input type="submit" value="adding">
    </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-17
      • 2013-05-29
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2016-08-17
      相关资源
      最近更新 更多