Django 设计模型:Item/Inventory/User
Django Designing Model : Item/Inventory/User
我想询问一些关于建模特定模型行为的建议。
基本上我有一个模型项目。它描述了项目的名称和描述。
我有一个库存,应该有 "List" 件物品,考虑到每件物品的数量应该在库存中指定。
每个 User
应该有一个独特的库存。
这是我正在尝试做的事情:
class User(models.Model):
name = models.CharField(max_length=100)
invetory =models.ForeignKey(inventory,on_delete=models.CASCADE)
class item(models.Model):
name =models.CharField(max_length=40)
description = models.TextField(max_length=200)
value = models.FloatField()
class inventory(models.Model):
?
我不确定这是否是正确的方法。
class User(models.Model):
name = models.CharField(max_length=100)
class Inventory(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
class Item(models.Model):
name =models.CharField(max_length=40)
description = models.TextField(max_length=200)
value = models.FloatField()
invetory =models.ForeignKey(Inventory,on_delete=models.CASCADE)
这应该符合您的规范。我们已经将库存绑定到一个用户,每个项目都有一个到库存的外键 table。
现在你可以做
1. To access inventory you can do `user.inventory`
2. To get a list of items `user.inventory.item_set`
3. You should use the `post_save` signal to create the inventory object.
class inventory(models.Model):
user = models.ForeignKey(User, default=User.objects.first())
item = models.ForeignKey(Item, default=Item.objects.first())
count = models.IntegerField(default=0)
我认为这样设计会更好。
您应该使用多对多关系。首先,您应该从用户模型中删除 FK。然后为项目创建一个单独的模型,最后 link 许多用户对许多项目(一个用户可以处理多个项目,一个项目可以属于多个用户)。类似的东西:
class User(models.Model):
name = models.CharField(max_length=100)
class item(models.Model):
name =models.CharField(max_length=40)
class inventory(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
item = models.ForeignKey(item, on_delete=models.DO_NOTHING)
quantity = models.FloatField()
PS Class 名称应使用 PascalCase 约定 https://www.python.org/dev/peps/pep-0008/?#class-names
我想询问一些关于建模特定模型行为的建议。 基本上我有一个模型项目。它描述了项目的名称和描述。
我有一个库存,应该有 "List" 件物品,考虑到每件物品的数量应该在库存中指定。
每个 User
应该有一个独特的库存。
这是我正在尝试做的事情:
class User(models.Model):
name = models.CharField(max_length=100)
invetory =models.ForeignKey(inventory,on_delete=models.CASCADE)
class item(models.Model):
name =models.CharField(max_length=40)
description = models.TextField(max_length=200)
value = models.FloatField()
class inventory(models.Model):
?
我不确定这是否是正确的方法。
class User(models.Model):
name = models.CharField(max_length=100)
class Inventory(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
class Item(models.Model):
name =models.CharField(max_length=40)
description = models.TextField(max_length=200)
value = models.FloatField()
invetory =models.ForeignKey(Inventory,on_delete=models.CASCADE)
这应该符合您的规范。我们已经将库存绑定到一个用户,每个项目都有一个到库存的外键 table。
现在你可以做
1. To access inventory you can do `user.inventory`
2. To get a list of items `user.inventory.item_set`
3. You should use the `post_save` signal to create the inventory object.
class inventory(models.Model):
user = models.ForeignKey(User, default=User.objects.first())
item = models.ForeignKey(Item, default=Item.objects.first())
count = models.IntegerField(default=0)
我认为这样设计会更好。
您应该使用多对多关系。首先,您应该从用户模型中删除 FK。然后为项目创建一个单独的模型,最后 link 许多用户对许多项目(一个用户可以处理多个项目,一个项目可以属于多个用户)。类似的东西:
class User(models.Model):
name = models.CharField(max_length=100)
class item(models.Model):
name =models.CharField(max_length=40)
class inventory(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
item = models.ForeignKey(item, on_delete=models.DO_NOTHING)
quantity = models.FloatField()
PS Class 名称应使用 PascalCase 约定 https://www.python.org/dev/peps/pep-0008/?#class-names