Django设计模型:项目/库存/用户

时间:2018-07-02 18:48:07

标签: python django api models

我想问一些关于建模特定模型行为的建议。 基本上我有一个模型项。它描述了项目的名称和描述。

我有一个库存,其中应该包含项目的“清单”,考虑到应该在库存中指定每个项目的数量。

每个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):
?

我不确定这是否是正确的方法。

3 个答案:

答案 0 :(得分:1)

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)

这应该按照您的规范进行。我们已经将库存与用户绑定在一起,并且每个项目都有一个到库存表的外键。

现在您可以做

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. 

答案 1 :(得分:1)

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)

我认为这将是一个更好的设计。

答案 2 :(得分:1)

您应该使用多对多关系。首先,您应该从用户模型中删除FK。然后为项目创建一个单独的模型,最后将许多用户链接到许多项目(一个用户可以处理多个项目,而一个项目可以属于多个用户)。像这样:

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类名称应使用PascalCase约定https://www.python.org/dev/peps/pep-0008/?#class-names