0

我想创建一个费用跟踪应用程序,每个用户都可以在其中输入费用并将其分类到自己的类别中。这是我使用的模型定义:

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    user = models.ForeignKey(User, related_name="my_categories")
    name = models.CharField(max_length=50)

class Expense(models.Model):
    date = models.DateField()
    amount = models.IntegerField()
    description = models.TextField()
    category = models.ForeignKey(Category)
    user = models.ForeignKey(User)

每个类别都必须与一个用户相关联,以便我们可以在输入费用时向每个用户显示他自己的类别以供选择。出于类似的原因,每个费用记录都应该与一个用户相关联。但是在费用的定义中,我们有两个对用户模型的引用,一个直接通过“用户”字段,另一个通过具有用户参考的“类别”字段。

我相信像这样的多次引用是一件坏事。有没有更好的方法来建模这个?我知道我们可以从类别参考中找到用户,但这似乎是一种迂回的方式。

4

1 回答 1

1

尽管您的数据库不是 100% 标准化的,但在您的情况下,我不认为第二个参考是多余的。“费用”和“类别”都是定义明确的实体,属于用户。如果您稍后想要更改外键以允许空类别或 ManyToManyField,您会立即注意到两个用户字段都是必需的。当该列存在时,数据库和开发人员的用户查找也容易得多。

于 2011-06-22T18:32:51.617 回答