有错误消息
order = models.ForeignKey(Order, on_delete=models.CASCADE)
NameError: name 'Order' is not defined
Run Code Online (Sandbox Code Playgroud)
因此,我怎么做一个类将缺少课程的cuz低于当前阅读课程,以便缺少课程.我该如何解决这个问题?我读过多对多功能,可能解决了这个问题吗?
class Items(models.Model):
name = models.CharField(max_length=10)
def __str__(self):
return self.name
class OrderedItem(models.Model):
items = models.ForeignKey(Items, on_delete=models.CASCADE)
order = models.ForeignKey(Order, on_delete=models.CASCADE)
amount = models.IntegerField()
def __str__(self):
return self.items
class Order(models.Model):
#clientID
orderedItem = models.ForeignKey(OrderedItem, on_delete=models.CASCADE)
#truckId Foreign key till truck
created = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
emergency = models.BooleanField(default=False)
status = models.IntegerField()
#building
#floor
def __str__(self):
return self.id
Run Code Online (Sandbox Code Playgroud)
bak*_*kal 13
当发生这种情况时,我通常会使用所谓的完全限定的模型字符串,这是一个花哨的术语,代表模型的字符串和包含应用程序的格式'app_label.ModelName'
例如,如果您的模型是Order,则模型字符串名称将是字符串'Order'
所以你已经可以做到:
order = models.ForeignKey('Order', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
有了上述,Django将'Order'在同一个应用程序中寻找模型.如果您尚未定义它,也可以,只要它已定义.
如果该模型恰好来自不同的应用程序,它将是:
order = models.ForeignKey('appname.Order', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
因为Order指向OrderItems和OrderItems指向Order您与Django为您生成的相关查询related_name='+'发生冲突.您可以禁用以下内容:
order = models.ForeignKey('Order', on_delete=models.CASCADE, related_name='+')
Run Code Online (Sandbox Code Playgroud)
由于OrderedItem已经"属于"的Order,有一个在其从一个ForeignKey没有点Order到OrderedItem,你可以只是将其删除,而不是处理上述冲突.
所以你拥有的将是这样的
Item
Order
OrderedItem
+ FK(Item)
+ FK(Order)
Run Code Online (Sandbox Code Playgroud)
一种不涉及引用尚未定义的模型的设计:)
| 归档时间: |
|
| 查看次数: |
3886 次 |
| 最近记录: |