关键词:
【中文标题】Django Rest Framework如何根据ID保存具有相关字段的模型【英文标题】:Django Rest Framework how to save a model with Related Field based on ID 【发布时间】:2015-01-17 16:17:31 【问题描述】:我对 DRF 有点陌生。我的 Record 模型看起来像这样:
class Records(models.Model):
owner = models.ForeignKey(User, null=True)
activity = models.ForeignKey(Activity, null=True)
time_start = models.DateTimeField(null=True)
time_end = models.DateTimeField(null=True)
...
RecordSerializer 就是这个:
class RecordSerializer(serializers.ModelSerializer):
now = datetime.today()
owner = serializers.Field(source='owner.username')
time_start = serializers.DateTimeField(source='now')
class Meta:
model = Records
fields = ("owner", "activity", "time_start")
这是视图:
class StartApiView(generics.CreateAPIView):
model = Records
serializer_class = RecordSerializer
def pre_save(self, obj):
obj.owner = self.request.user
POST 请求是从 Backbone 发送的,它包含一个带有活动 ID 的字段,例如“activity:12”。如果我想让视图保存Record并将activity设置为id为12的Activity怎么办?
【问题讨论】:
【参考方案1】:接受的答案对于 DRF v2.x 是正确的,但 is no longer for newer (3.x) versions,因为它会引发 AssertionError
:
AssertionError:关系字段必须提供
queryset
参数,或设置read_only=True
。
对于较新的版本,只需添加 queryset
参数即可:
class RecordSerializer(serializers.ModelSerializer):
activity = serializers.PrimaryKeyRelatedField(queryset=Activity.objects.all())
// [...]
【讨论】:
【参考方案2】:Django REST Framework provides a PrimaryKeyRelatedField
正是这个用例。
class RecordSerializer(serializers.ModelSerializer):
activity = serializers.PrimaryKeyRelatedField()
owner = serializers.CharField(read_only=True, source='owner.username')
time_start = serializers.DateTimeField(source='now')
class Meta:
model = Records
fields = ("owner", "activity", "time_start")
这将产生类似于您正在寻找的输出,并且当您想要更新它时,它将接受活动的id
。
【讨论】:
感谢您的回答,非常有用的参考。我会在视图正常工作后立即接受它。现在我正在尝试解决另一个错误,我在这个问题上发布了它,也许你也可以帮我一把:***.com/questions/27030449/…。根据请求类型更改 Django REST Framework ModelSerializer 中的字段?
】根据请求类型更改DjangoRESTFrameworkModelSerializer中的字段?【英文标题】:ChangeafieldinaDjangoRESTFrameworkModelSerializerbasedontherequesttype?【发布时间】:2016-11-1322:54:05【问题描述】:考虑这种情况,我有一个Book和Author模型。序列化器.pycl... 查看详情
如何在 django-rest-framework 中为 API 使用 TokenAuthentication
】如何在django-rest-framework中为API使用TokenAuthentication【英文标题】:HowtouseTokenAuthenticationforAPIindjango-rest-framework【发布时间】:2013-07-0718:26:11【问题描述】:我有一个django项目,使用django-rest-framework来创建api。想要使用基于令牌的... 查看详情
如何仅使用 django 作为后端并使用 django-rest-framework 发布
】如何仅使用django作为后端并使用django-rest-framework发布【英文标题】:Howtousedjangoonlyabackendandpostwithdjango-rest-framework【发布时间】:2016-11-2712:06:00【问题描述】:我将只使用Django作为后端。前端将使用React完成,没有django模板。我... 查看详情
如何优化查询 django rest-framework
】如何优化查询djangorest-framework【英文标题】:HowcanIoptimizequeriesdjangorest-framework【发布时间】:2018-11-2916:40:32【问题描述】:我有以下序列化程序classAutoSerializer(serializers.ModelSerializer):classMeta:model=Autofields=("nombre",)classMarcaSerial 查看详情
Django.rest_framework:如何序列化一对多?
】Django.rest_framework:如何序列化一对多?【英文标题】:Django.rest_framework:Howtoserializeonetomanytomany?【发布时间】:2014-09-0518:45:28【问题描述】:我在使用django进行序列化时遇到了一些问题。我有三个模型,比如说学校、房间和办... 查看详情
django-rest-framework:如何序列化已经包含 JSON 的字段?
】django-rest-framework:如何序列化已经包含JSON的字段?【英文标题】:django-rest-framework:HowDoISerializeaFieldThatAlreadyContainsJSON?【发布时间】:2014-04-0501:41:03【问题描述】:我对django-rest-framework还是很陌生,所以需要一些帮助。我有一... 查看详情
Django Rest Framework 如何更新 SerializerMethodField
】DjangoRestFramework如何更新SerializerMethodField【英文标题】:DjangoRestFrameworkHowtoupdateSerializerMethodField【发布时间】:2016-09-2508:12:16【问题描述】:我有一个这样的序列化器:classPersonSerializer(serializers.ModelSerializer):gender=serializers.Ser 查看详情
如何在 Select2 中处理从 Django REST Framework 本地提取的数据?
】如何在Select2中处理从DjangoRESTFramework本地提取的数据?【英文标题】:HowtoprocesslocallywithdrawndatafromDjangoRESTFrameworkinSelect2?【发布时间】:2016-10-2811:53:42【问题描述】:我正在尝试根据他们网站上的示例处理从select2插件中的DjangoR... 查看详情
如何使用 django-rest-framework 进行社交登录? [关闭]
】如何使用django-rest-framework进行社交登录?[关闭]【英文标题】:Howexactlyworkasocialloginwithdjango-rest-framework?[closed]【发布时间】:2015-11-2916:50:57【问题描述】:我需要创建一个Web服务来登录用户。此Web服务将从Android或iOS应用程序调... 查看详情
如何更改 django-rest-framework 的 authtoken 中的现有令牌?
】如何更改django-rest-framework的authtoken中的现有令牌?【英文标题】:HowcanIchangeexistingtokenintheauthtokenofdjango-rest-framework?【发布时间】:2014-01-0803:31:50【问题描述】:保存失败:fromrest_framework.authtoken.modelsimportTokentoken=Token.objects.get 查看详情
Django - 如何使用 Django Rest Framework 按日期过滤?
】Django-如何使用DjangoRestFramework按日期过滤?【英文标题】:Django-HowtofilterbydatewithDjangoRestFramework?【发布时间】:2016-09-0802:41:57【问题描述】:我有一些带有时间戳字段的模型:models.pyclassEvent(models.Model):event_type=models.CharField(max_l... 查看详情
如何在 Django Rest Framework 中为特定应用设置权限
】如何在DjangoRestFramework中为特定应用设置权限【英文标题】:HowsetpermissionforspecificappinDjangoRestFramework【发布时间】:2018-03-0122:09:15【问题描述】:我的Django项目中有两个REST应用程序:api-应该是AllowAny和ReadOnly!apicrm-应该是rest_fr... 查看详情
如何在 django-rest-framework 中对权限进行单元测试?
】如何在django-rest-framework中对权限进行单元测试?【英文标题】:Howtounittestpermissionsindjango-rest-framework?【发布时间】:2016-09-0708:14:14【问题描述】:她的权限是我想要进行单元测试的示例权限。#permissions.pyfrommyapp.modelsimportMembersh... 查看详情
扩展 django 用户 django-rest_framework 给了我 KeyError
】扩展django用户django-rest_framework给了我KeyError【英文标题】:ExtendingdjangoUserdjango-rest_frameworkgivesmeKeyError【发布时间】:2017-02-1719:01:52【问题描述】:我是djangorest_framework的新手,并且有问题,我已经根据django文档扩展了auth_user,... 查看详情
如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?
】如何使用TemplateHTMLRenderer在Django-REST-Framework中创建/放置?【英文标题】:HowdoIuseTemplateHTMLRendererforCreate/PutinDjango-REST-Framework?【发布时间】:2019-04-1512:45:20【问题描述】:我很难找到正确的方法来初始化TemplateHTMLRenderer以呈现用... 查看详情
如何在 Django Rest Framework 中散列 Django 用户密码?
】如何在DjangoRestFramework中散列Django用户密码?【英文标题】:HowtoHashDjangouserpasswordinDjangoRestFramework?【发布时间】:2017-05-1023:51:41【问题描述】:我正在尝试使用DjangoRestFramework为我的用户注册创建一个API。我按照api-guide中的步骤... 查看详情
DRF:如何将 django-rest-framework-jwt 集成到 Djoser
】DRF:如何将django-rest-framework-jwt集成到Djoser【英文标题】:DRF:howtointegratedjango-rest-framework-jwttoDjoser【发布时间】:2015-07-0811:05:22【问题描述】:我打算用DjangoRestFramework构建一个应用程序。我对使用Django-Rest-Framework-JWT身份验证机... 查看详情
如何缓存 Django Rest Framework API 调用?
】如何缓存DjangoRestFrameworkAPI调用?【英文标题】:HowtocacheDjangoRestFrameworkAPIcalls?【发布时间】:2016-11-1404:07:29【问题描述】:我使用Memcached作为我的django应用程序的后端。此代码在正常的django查询中工作正常:defget_myobj():cache_key... 查看详情