Python 无法使用Django REST发布OneToOneField
我是Django的初学者,特别是Django REST框架的初学者。 我正在尝试发布一个包含用户设置的新用户 这是我的模特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
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)