Django 存储具有相关模型的对象会导致IntegrityError:null值违反NOTNULL约束

Django 存储具有相关模型的对象会导致IntegrityError:null值违反NOTNULL约束,django,django-models,tastypie,Django,Django Models,Tastypie,我在使用Django和Tastypie时遇到以下问题。奇怪的是,在大约一年左右的时间里,以下各项工作完美无瑕。现在,当我试图在车主上编辑汽车并存储车主时,我遇到以下错误: django.db.utils.IntegrityError:列“car_id”中的null值违反了not null约束 详细信息:失败行包含(55,test,53,null) 我知道我可以将模型车轮上的字段car更改为null,但我确实希望定义此关系。奇怪的是,当我将字段更改为null进行测试时,我的数据库中设置了id。然后

我在使用Django和Tastypie时遇到以下问题。奇怪的是,在大约一年左右的时间里,以下各项工作完美无瑕。现在,当我试图在
车主
上编辑
汽车
并存储
车主
时,我遇到以下错误:

django.db.utils.IntegrityError:列“car_id”中的null值违反了not null约束 详细信息:失败行包含(55,test,53,null)

我知道我可以将模型
车轮
上的字段
car
更改为null,但我确实希望定义此关系。奇怪的是,当我将字段更改为null进行测试时,我的数据库中设置了id。然后,当我进行另一次编辑时,不会更新数据库条目,而是创建一个新条目。此条目再次包含右侧id,但旧条目将丢失该id,该字段保留为空

这是在Car对象上编辑两次后,表
wheel
的外观:

postgres=# TABLE wheel;
id | value | wheel_type_id | car_id
---+-------+---------------+--------
53 | abc   |            53 |
54 | def   |            53 |     11
(2 rows)
相反,我期望的结果是:

postgres=# TABLE wheel;
id | value | wheel_type_id | car_id
---+-------+---------------+--------
53 | def   |            53 |     11
(1 row)
型号:

class Owner(models.Model):
    id = models.AutoField(primary_key=True)

class Car(models.Model):
    owner = models.OneToOneField('Owner', null=True, related_name='car',
                                  on_delete=models.CASCADE)
    ready = models.BooleanField(default=False)

class Wheel(models.Model):
    car = models.ForeignKey(Car, related_name='wheel',
                            on_delete=models.CASCADE)
    wheel_type = models.ForeignKey(WheelType, related_name='names',
                                   on_delete=models.CASCADE)
    value = models.CharField(max_length=500)
Tastypie资源:

class OwnerResource(ModelResource):
    car = fields.ToOneField('CarResource', null=True, full=True,       
                             attribute='car')

class CarResource(ModelResource):
    wheels = fields.ToManyField('WheelResource', 'wheels', null=True,
                                 blank=True, full=True)

class WheelResource(ModelResource):
    wheeltype = fields.ForeignKey('WheelTypeResource',   
                                  'wheel_type', full=False)


    class Meta:
        queryset = Wheel.objects.all()
        allowed_methods = ['get']
        ordering = ['modified']
        excludes = ['id']
        include_resource_uri = False
        limit = 100
        authorization = Authorization()
        always_return_data = True
请求示例:

fetch("http://0.0.0.0:8000/api/v1/owner/1/", {
    "credentials": "include",
    "headers": {
        "accept": "application/json",
        "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
        "cache-control": "no-cache",
        "content-type": "application/json",
        "pragma": "no-cache",
        "x-csrftoken": "3sarlkh0giQ7yqhTSclCivfEsSvs5R3a7gTw0pw293v80ypCT6n3Drm8AhQDx3GB"
    },
    "referrer": "http://0.0.0.0:8000/backend/owner/1",
    "referrerPolicy": "no-referrer-when-downgrade",
    "body": "{\"car\":{\"resource_uri\":\"/api/v1/car/3/\",\"wheels\":[{\"wheeltype\":\"/api/v1/wheeltype/identificationInfo/\",\"value\":\"abc\"}]},\"resource_uri\":\"/api/v1/owner/1/\",}",
    "method": "PATCH",
    "mode": "cors"
});

有人知道为什么在保存对象时没有定义
car\u id
,但在使字段为空时,它仍然会被设置吗?开始认为这可能是Tastypie或Django的一个bug。

如果你对汽车id有一个空约束。那么为什么你要在OwnerResource中的
ToOneField
上设置
null=True
?另外,你能给我们看一下你发送的其余呼叫吗?
null=True
允许车主拥有汽车。在我的车型中,这是由反向
OneToOneField
表示的,即每辆车可以属于一个车主。但是车主不一定需要定义一辆车。IntegrityError因WheelResource而出现。我用一个示例请求更新了我的问题。我必须说,这只是出于演示目的的真实请求的摘录。即使使用
car
字段扩展WheelResource,并通过自定义方法分配特定的car实例,也无助于成功更新数据库。您是否尝试过按此答案中所述将
相关的\u name='wheel'
添加到CarResource的wheels字段?这些文档表明了与您描述的类似的情况