如何在 django / tastypie 中处理多对多
How to deal with many-to-many in django / tastypie
我有以下两个模型,它们之间应该是多对多的:
class Blueprint(models.Model):
name = models.CharField(max_length=120)
description = models.TextField()
class Meta:
ordering = ["name", ]
class Workload(models.Model):
blueprints = models.ManyToManyField('Blueprint', db_constraint=False)
name = models.CharField(max_length=120)
description = models.TextField()
image = models.CharField(max_length=120)
flavor = models.CharField(max_length=120)
class Meta:
ordering = ["name", ]
作为 django 和 tastypie 的新手,我有几个问题:
1) 在蓝图和工作负载之间指定多对多的正确语法是什么,所以当创建新的蓝图记录时,它不会 运行 进入数据库约束,抱怨相关Workload记录不能为空
2) 我的 api.py 的正确语法是什么,以便将相关的工作负载 link 作为 GET /api/blueprint/1 输出的一部分,以及具有蓝图 link 作为 GET /api/workload/1 输出的一部分
我想,多对多在 django / tastypie 应用程序中很常见,很久以前就已经解决了,但是,我无法找到一个干净的解决方案(我是新手:)
不确定您遇到了什么问题,但您应该为每个模型添加主键,通常是一个自动 int 字段。
class Blueprint(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=120)
description = models.TextField()
class Meta:
ordering = ["name", ]
class Workload(models.Model):
id = models.AutoField(primary_key=True)
blueprints = models.ManyToManyField('Blueprint', db_constraint=False)
name = models.CharField(max_length=120)
description = models.TextField()
image = models.CharField(max_length=120)
flavor = models.CharField(max_length=120)
class Meta:
ordering = ["name", ]
您应该能够在没有工作量的情况下创建蓝图。但是,使用当前语法,您无法在没有分配蓝图的情况下拥有工作负载。如果您想允许没有蓝图的工作负载,请将 null=True, blank=True
添加到该字段。
至于url;这里有很多帖子展示了如何设置 url 就像你问的那样。
我有以下两个模型,它们之间应该是多对多的:
class Blueprint(models.Model):
name = models.CharField(max_length=120)
description = models.TextField()
class Meta:
ordering = ["name", ]
class Workload(models.Model):
blueprints = models.ManyToManyField('Blueprint', db_constraint=False)
name = models.CharField(max_length=120)
description = models.TextField()
image = models.CharField(max_length=120)
flavor = models.CharField(max_length=120)
class Meta:
ordering = ["name", ]
作为 django 和 tastypie 的新手,我有几个问题:
1) 在蓝图和工作负载之间指定多对多的正确语法是什么,所以当创建新的蓝图记录时,它不会 运行 进入数据库约束,抱怨相关Workload记录不能为空
2) 我的 api.py 的正确语法是什么,以便将相关的工作负载 link 作为 GET /api/blueprint/1 输出的一部分,以及具有蓝图 link 作为 GET /api/workload/1 输出的一部分
我想,多对多在 django / tastypie 应用程序中很常见,很久以前就已经解决了,但是,我无法找到一个干净的解决方案(我是新手:)
不确定您遇到了什么问题,但您应该为每个模型添加主键,通常是一个自动 int 字段。
class Blueprint(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=120)
description = models.TextField()
class Meta:
ordering = ["name", ]
class Workload(models.Model):
id = models.AutoField(primary_key=True)
blueprints = models.ManyToManyField('Blueprint', db_constraint=False)
name = models.CharField(max_length=120)
description = models.TextField()
image = models.CharField(max_length=120)
flavor = models.CharField(max_length=120)
class Meta:
ordering = ["name", ]
您应该能够在没有工作量的情况下创建蓝图。但是,使用当前语法,您无法在没有分配蓝图的情况下拥有工作负载。如果您想允许没有蓝图的工作负载,请将 null=True, blank=True
添加到该字段。
至于url;这里有很多帖子展示了如何设置 url 就像你问的那样。