Django:模型字段中的子字段

时间:2013-02-19 09:07:04

标签: django django-models python-2.7

在我的主要类模型交易中,我有一些字段作为描述,价格,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)

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

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

我对Django很新,任何有关这方面的帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分: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)
    #...

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

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

更新

重新阅读您的问题,听起来您可能只想在主要交易模型上显示/隐藏这些附加字段。如果是这种情况,那么您希望在管理中使用字段集,并使用“崩溃”类。 docs中有一个例子。

如果您希望每个Deal记录与其关联多个kid_score,那么您需要一个外键。如果每个Deal只能有一个kid_score,那么你需要在主模型中保留kid_score(和其他)字段(如果这很令人困惑,那么一定要对sql / relational进行一些阅读数据库)。