我有一个模特"作业"我希望能够通过api更新。
根据评论更新
urls.py
router = routers.DefaultRouter()
router.register(r'assignments', views.AssignmentList, base_name='Assignments')
urlpatterns = [
url(r'^api/v1/', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
serializers.py
class AssignmentSerializer(serializers.ModelSerializer):
class Meta:
model = Assignment
fields = (
'id', 'company', 'farm', 'sensor', 'name', 'location', 'notes', 'units', 'max_height', 'frequency',
'interval', 'max_threshold', 'min_threshold', 'notify', 'last_alert_time', 'last_alert_water_level')
views.py
class AssignmentList(viewsets.ModelViewSet):
serializer_class = AssignmentSerializer
pagination_class = None
def get_queryset(self):
queryset = Assignment.objects.all()
company_id = self.request.query_params.get('company_id', None)
sensor_id = self.request.query_params.get('sensor_id', None)
if company_id is not None:
queryset = Assignment.objects.filter(company_id=company_id)
if sensor_id is not None:
queryset = Assignment.objects.filter(sensor_id=sensor_id)
return queryset
目前,我的观点允许根据两个字段轻松过滤," company_id'和' sensor_id'。这允许在json中轻松访问数据。不幸的是,即使使用内置的API表单,我也无法弄清楚如何回复。我希望能够过滤到单个实例并编辑单个字段,让我们说" assignment.name"现在。
我理解......
ModelViewSet类提供的操作是.list(),. retrieve(),. create(),. update(),. partial_update()和.destroy()。 (DRF Docs)
那么我需要做些什么才能利用它们通过url编辑模型实例?或者老实说,只需编辑一个时期。我一直在尝试不同的Mixins,视图(UpdateAPIView,RetrieveUpdateAPIView等)和特别是Stack Overflow: Django Rest Framework update field这个问题。
答案 0 :(得分:1)
为什么你缺少所需的外键字段完全这个问题。
原因可能是您的字段被称为company
,farm
和sensor
,而不是company_id
等。因为基础数据库字段是调用company_id
等等,DRF将它们检测为模型上的只读属性,因此允许您在字段元组中指定这些名称而不显示错误,但不显示字段中的字段可浏览的API。更改fields
元组以包含Django字段的实际名称。
另请注意,由于您正在使用HyperlinkedModelSerializer,DRF需要为这些相关模型提供链接的ViewSet。如果您没有定义那些,请将其设置为基本的ModelSerializer。