2

在我的主要类模型 Deals 中,我有某些字段,如描述、价格、date_created 等。我现在必须添加一些具有子字段的字段。例如,我正在尝试向交易添加年龄字段。此年龄字段还有子字段(如 score_for_kid、score_for_baby、score_for_old 等),我想从管理员那里编辑这些分数。

这是我的models.py:

class Deals(models.Model):
    description = models.TextField()
    price = models.DecimalField(max_digits=7, decimal_places=2)
    url = models.URLField(verify_exists=False)
    currency = models.CharField(max_length=3)
    created_date = models.DateField(auto_now_add=True)

    kid_score = models.IntegerField(max_length=2,default=0)
    teenager_score = models.IntegerField(max_length=2,default=0)
    youth_score = models.IntegerField(max_length=2,default=0)
    old_score = models.IntegerField(max_length=2,default=0)

我不想在模型中存储所有这些子字段(大约 20-25 个在 4 个不同的字段中),而是一个连接到这些子字段的年龄字段。ManyToManyField 会为此工作吗?

基本要求是当用户在浏览器上选择一个子字段(比如孩子)时,显示所有具有较高孩子分数的对象。

我对 Django 很陌生,对此的任何帮助都会很棒。谢谢。

4

1 回答 1

0

如果我正确理解您的问题,您需要使用 ForeignKey 字段。

class Deals(models.Model):
    description = models.TextField()
    price = models.DecimalField(max_digits=7, decimal_places=2)
    #...
    age = models.ForeignKey(Age)

class Age(models.Model):
    kid_score = models.IntegerField(max_length=2,default=0)
    teenager_score = models.IntegerField(max_length=2,default=0)
    #...

好好阅读有关 Models 的文档。您可能还会发现对关系数据库/基本 sql 进行一些阅读很有用。

当您在 django admin 中编辑对象时,您可能需要使用InlineModelAdmin类。

更新

重新阅读您的问题,听起来您可能只是想在主 Deal 模型上显示/隐藏这些附加字段。如果是这种情况,那么您想在管理员中使用带有“collapse”类的字段集。文档中有一个示例。

如果您希望每条Deal记录都有多个kid_score与之关联的 ',那么您需要一个外键。如果每个Deal只能有一个kid_score,那么您需要将kid_score(和其他)字段保留在主模型中(如果这令人困惑,那么一定要阅读 sql / 关系数据库)。

于 2013-02-19T09:12:24.990 回答