将猫鼬模式转换为 django 模型

时间:2021-01-17 06:58:58

标签: django mongodb django-models django-rest-framework mongoose-schema

我有以下 javascript 架构

 const mongoose = require('mongoose');

const pointSchema = new mongoose.Schema({
  timestamp: Number,
  coords: {
    latitude: Number,
    longitude: Number,
    altitude: Number,
    accuracy: Number,
    heading: Number,
    speed: Number
  }
});
const trackSchema = new mongoose.Schema({
  userId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  },
  name: {
    type: String,
    default: ''
  },
  locations: [pointSchema]
});

mongoose.model('Track', trackSchema);

我正在尝试将上述文件转换为 Django 模型。想知道如何在我的 models.py 中编写 locations: [pointSchema]const pointSchema

可以转换吗?

这就是 express 服务器保存数据的方式。我想达到同样的目标

router.post('/tracks', async (req, res) => {
  const { name, locations } = req.body;

  if (!name || !locations) {
    return res
      .status(422)
      .send({ error: 'You must provide a name and locations' });
  }

  try {
    const track = new Track({ name, locations, userId: req.user._id });
    await track.save();
    res.send(track);
  } catch (err) {
    res.status(422).send({ error: err.message });
  }
});

1 个答案:

答案 0 :(得分:0)

您将在第一部分使用 Many-to-one relationship 描述为 ForeignKey。以 docs 为基础,它看起来像这样:

from django.db import models

class Coords(models.Model):
    latitude = models.FloatField(...)
    longitude = models.FloatField(...)
    ...

class PointSchema(models.Model):
    timestamp = models.DateTimeField(...)
    coords = models.ForeignKey(Coords, on_delete=models.CASCADE)

对于 trackSchema,我们使用 ManyToManyField。简短摘录:

class TrackSchema(models.Model):
    ...
    locations = models.ManyToManyField(PointSchema)
    ...