我有以下两个模型,它们之间应该有多对多:
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)在Blueprint和Workload之间指定多对多的正确语法是什么,因此当创建新的Blueprint记录时,它不会遇到数据库约束,抱怨相关的Workload记录不能空
2)我的api.py的正确语法是什么,将相关的Workload链接作为GET / api / blueprint / 1输出的一部分,以及将Blueprint链接作为GET / api的一部分/ workload / 1输出
我想,拥有多对多是django / tastypie应用程序很常见,很久以前就已经解决了,但是,我无法找到一个干净的解决方案(而且我是新的:)
答案 0 :(得分:1)
不确定您遇到了什么问题,但是您应该为每个模型添加主键,通常是自动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
添加到该字段。
至于网址;这里有大量的帖子显示如何设置一个像你一样的网址。