尝试在 Django 中保存模型表单时,为什么会出现“外键不匹配”?

人道橡皮擦

我正在尝试在 Django 中保存一个模型表单的实例。我已经设置了一个模板来输入信息到表单和一个视图来处理保存。表单验证正常,但在尝试保存时会生成外键不匹配错误。我在这里做错了什么?

我正在运行 Django 2.0.0。我已经尝试添加和删除 primary_key 选项而没有任何运气并删除我的 sqlite 数据库,清除所有 pycache,然后再次迁移。问题仍然存在。

#models.py
from django.db import models
import uuid
from users.models import Company, CustomUser
from delivery import settings

class Location(models.Model):
    location_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    address = models.CharField(max_length = 120)
    date_added = models.DateField(auto_now_add = True)

class Shipment(models.Model):
    date_created = models.DateField(auto_now_add=True)
    sender_company = models.ForeignKey(Company, on_delete = models.PROTECT, related_name='sender')
    receiver_company = models.ForeignKey(Company, on_delete = models.PROTECT, related_name='receiver')
    origin = models.ForeignKey(Location, on_delete = models.SET_DEFAULT, default = 'Location no longer active.', related_name='origin')
    destination = models.ForeignKey(Location, on_delete = models.SET_DEFAULT, default = 'DESTINATION UNKNOWN', related_name='destination')
    expected_arrival = models.DateField()
    weight = models.FloatField()
    current_handler = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.SET_DEFAULT, default = 'UNKNOWN')
    shipment_id = models.UUIDField(unique=True, primary_key = True, default=uuid.uuid4, editable=False)
#forms.py
from django import forms
from .models import Location, Shipment

class LocationRegisterForm(forms.ModelForm):

    class Meta:
        model = Location
        fields = '__all__'      

class CreateShipment(forms.ModelForm):

    class Meta:
        model = Shipment
        exclude = ['current_handler', 'shipment_id']

    def clean_expected_arrival(self):
        expected_arrival = self.cleaned_data['expected_arrival']
        date_created = self.cleaned_data['date_created']
        if expected_arrival < date_created:
            raise ValidationError('Expected arrival date cannot be in the past.')
        return expected_arrival
#views.py
from django.shortcuts import render, redirect
from .forms import CreateShipment, LocationRegisterForm
from users.permissions import group_required

@group_required('delivery_employee')
def new_shipment(request):
    if request.method == 'POST':
        form = CreateShipment(request.POST)
        if form.is_valid():
            temp_form = form.save(commit=False)
            current_user = request.user
            temp_form.current_handler = current_user
            temp_form.save()
            return redirect('dash-home')
        else:
            return render(request, 'shipments/new-shipment.html', {'form':form})
    form = CreateShipment()
    return render(request, 'shipments/new-shipment.html', {'form':form})

@group_required('delivery_employee')
def add_location(request):
    if request.method == 'POST':
        form = LocationRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('new-shipment')
        else:
            return render(request, 'shipments/location-register.html', {'form':form})
    form = LocationRegisterForm()
    return render(request, 'shipments/location-register.html', {'form':form})

我收到错误消息:

File "C:\Python34\lib\site-packages\django\db\backends\sqlite3\base.py", line 303, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: foreign key mismatch - "shipments_shipment" referencing "shipments_location"

谢谢!

伊帕莱卡

您的origindestination字段将默认值设置为纯字符串,它们的默认值应该是默认的 Location 实例。

创建方法get_default_originget_default_destination如您将从数据库返回现有记录的位置。将这些方法分配给默认参数,例如

origin = models.ForeignKey(Location, on_delete = models.SET_DEFAULT, default=self.get_default_origin, related_name='origin')
destination = models.ForeignKey(Location, on_delete = models.SET_DEFAULT, default=self.get_default_destination, related_name='destination')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我尝试使用实体框架将表单保存到测验模型中时,为什么会出现错误?

来自分类Dev

由于未提供用户ID(外键),因此尝试更新单个Django表单/模型字段失败

来自分类Dev

尝试保存模型实例的Django AttributeError

来自分类Dev

尝试删除用户时出现Django FieldError

来自分类Dev

Django-尝试更新模型对象时出现ValueError

来自分类Dev

尝试在Django中创建新记录时出现外键错误

来自分类Dev

UnicodeDecodeError:尝试将图像保存到Django模型时

来自分类Dev

sqlite中尝试将rowid用作外键时出现外键不匹配错误

来自分类Dev

Django:尝试访问ManyToMany字段时出错

来自分类Dev

尝试使用pip安装Django时出错

来自分类Dev

尝试使用 django 设置 mysql 时出错

来自分类Dev

尝试使用Django中的外键列表创建PostgreSQL字段

来自分类Dev

Django - 尝试不在表单中但在模型中的字段

来自分类Dev

当我尝试保存测试计划时,为什么会出现 NoClassDefFound 错误?

来自分类Dev

尝试在django中将小部件制作为表单时出错

来自分类Dev

尝试做点积时为什么会出现TypeError?

来自分类Dev

尝试启动连接时为什么会出现NULL?

来自分类Dev

尝试从Django应用打开json文件时出现编码错误

来自分类Dev

为什么在尝试匹配元组时出现类型不匹配错误?

来自分类Dev

为什么在尝试匹配元组时出现类型不匹配错误?

来自分类Dev

尝试从其他模型中提取值时出现Django ManyToManyField错误

来自分类Dev

尝试创建自定义模型类时出现 Django 错误

来自分类Dev

尝试添加外键时,为什么MYSQL错误?

来自分类Dev

当您尝试通过POST方法保存在vars中时,Django不返回任何内容

来自分类Dev

为什么在尝试登录Box时出现重定向URI不匹配的情况?

来自分类Dev

为什么尝试在Debian上安装Mono时出现哈希总和不匹配错误

来自分类Dev

单击重置单选按钮尝试在Django中提交表单

来自分类Dev

尝试向 Django 表单上的输入元素添加类属性。

来自分类Dev

Django模型尝试自动创建主键字段(即使已指定)

Related 相关文章

  1. 1

    当我尝试使用实体框架将表单保存到测验模型中时,为什么会出现错误?

  2. 2

    由于未提供用户ID(外键),因此尝试更新单个Django表单/模型字段失败

  3. 3

    尝试保存模型实例的Django AttributeError

  4. 4

    尝试删除用户时出现Django FieldError

  5. 5

    Django-尝试更新模型对象时出现ValueError

  6. 6

    尝试在Django中创建新记录时出现外键错误

  7. 7

    UnicodeDecodeError:尝试将图像保存到Django模型时

  8. 8

    sqlite中尝试将rowid用作外键时出现外键不匹配错误

  9. 9

    Django:尝试访问ManyToMany字段时出错

  10. 10

    尝试使用pip安装Django时出错

  11. 11

    尝试使用 django 设置 mysql 时出错

  12. 12

    尝试使用Django中的外键列表创建PostgreSQL字段

  13. 13

    Django - 尝试不在表单中但在模型中的字段

  14. 14

    当我尝试保存测试计划时,为什么会出现 NoClassDefFound 错误?

  15. 15

    尝试在django中将小部件制作为表单时出错

  16. 16

    尝试做点积时为什么会出现TypeError?

  17. 17

    尝试启动连接时为什么会出现NULL?

  18. 18

    尝试从Django应用打开json文件时出现编码错误

  19. 19

    为什么在尝试匹配元组时出现类型不匹配错误?

  20. 20

    为什么在尝试匹配元组时出现类型不匹配错误?

  21. 21

    尝试从其他模型中提取值时出现Django ManyToManyField错误

  22. 22

    尝试创建自定义模型类时出现 Django 错误

  23. 23

    尝试添加外键时,为什么MYSQL错误?

  24. 24

    当您尝试通过POST方法保存在vars中时,Django不返回任何内容

  25. 25

    为什么在尝试登录Box时出现重定向URI不匹配的情况?

  26. 26

    为什么尝试在Debian上安装Mono时出现哈希总和不匹配错误

  27. 27

    单击重置单选按钮尝试在Django中提交表单

  28. 28

    尝试向 Django 表单上的输入元素添加类属性。

  29. 29

    Django模型尝试自动创建主键字段(即使已指定)

热门标签

归档