Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用Django REST发布OneToOneField_Python_Django_Django Rest Framework - Fatal编程技术网

Python 无法使用Django REST发布OneToOneField

Python 无法使用Django REST发布OneToOneField,python,django,django-rest-framework,Python,Django,Django Rest Framework,我是Django的初学者,特别是Django REST框架的初学者。 我正在尝试发布一个包含用户设置的新用户 这是我的模特 from django.db import models from datetime import datetime from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles LEXERS = [item for item in get_all_lexers

我是Django的初学者,特别是Django REST框架的初学者。 我正在尝试发布一个包含用户设置的新用户

这是我的模特

from django.db import models
from datetime import datetime 
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles

LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())

class Address(models.Model):
    number = models.IntegerField(null=True)
    streetName = models.CharField(max_length=50, default=None, null=True)
    zipCode = models.IntegerField(default=None, null=True)
    city = models.CharField(max_length=50, default=None, null=True)
    country = models.CharField(max_length=50, default=None, null=True)

class Settings(models.Model):
    cancelTime = models.IntegerField(default=5)
    onlyInWifi = models.BooleanField(default=False)

class User(models.Model):
    firstName = models.CharField(max_length=100)
    lastName = models.CharField(max_length=100)
    pseudo =  models.CharField(max_length=100, default=None)
    mail = models.CharField(max_length=100)
    password = models.CharField(max_length=250)
    address = models.ForeignKey(Address, null=True)
    settings = models.OneToOneField(Settings, null=True)
这是我的serializers.py

from rest_framework import serializers
from api.models import User
from api.models import Address
from api.models import Settings


class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ('number', 'streetName', 'zipCode', 'city', 'country')

class SettingsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Settings
        fields = ('cancelTime', 'onlyInWifi')

class UserSerializer(serializers.ModelSerializer):
    address = AddressSerializer(required=False)
    settings = SettingsSerializer(required=False)

    class Meta:
        model = User
        fields = ('pk','firstName', 'lastName', 'pseudo', 'mail', 'password', 'settings', 'address')

    def create(self, validated_data):
        if(validated_data.get('address')):
            address_data = validated_data.pop('address')
            address = Address.objects.create(**address_data)
        else:
            address = None

        if(validated_data.get('settings')):
            settings_data = validated_data.pop('settings')
            settings = Settings.objects.create(**settings_data)
        else:
            settings = Settings()

        user = User.objects.create(**validated_data)  
        user.address = address
        user.settings = settings
        return user
这是我的URL.py

from django.conf.urls import patterns, url

urlpatterns = patterns(
    'api.views',

    #Users
    url(r'^users/$', 'users_list', name='users_list'),
    url(r'^users/(?P<pk>[0-9]+)$', 'user_detail', name='user_detail'),
}
当我尝试发布一个新用户时,我有我想要的行为

但当我加载api/用户以检查我的用户是否添加良好时,我的设置字段为空


我不明白
serializers.py
文件中的问题是什么,在创建用户对象之前,必须添加
设置和
地址

因此,请将其替换为:

 user = User.objects.create(**validated_data)  
 user.address = address
 user.settings = settings
作者:


你能添加显示你所发布内容的示例代码吗?另外,您的
用户
模型允许
设置
为空,对吗?是的,我的设置可以为空,但例如当我发布以下内容时:{“firstName”:“firstNameTest”,“lastName”:“lastNameTest”,“pseudo”:“pseudoTest”,“mail”:test@gmail.com,“密码”:“测试通行证”,“用户设置”:{“取消时间”:50,“onlyInWifi”:true}}我有我想要的行为,但是当我加载api/用户时,我刚才添加的用户对象中的设置为null
 user = User.objects.create(**validated_data)  
 user.address = address
 user.settings = settings
validated_data['address'] = address;
validated_data['settings'] = settings;
user = User.objects.create(**validated_data)