帮助Django模型关系&管理屏幕

时间:2010-04-20 08:57:27

标签: django django-models django-admin

我第一次使用Django和StackOverflow可以提供一些帮助。

平台有很多类别,类别可以属于许多平台。产品属于一个平台和一个或多个平台类别。

所以这就是我目前为我的模型所做的:

 class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)
    is_active = models.BooleanField(default=True)

    def __unicode__(self):
        return self.name

class Platform(models.Model):
    name = models.CharField(max_length=50, unique=True)
    is_active = models.BooleanField(default=True)
    categories = models.ManyToManyField(Category)

    def __unicode__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=50)
    is_active = models.BooleanField(default=True)
    platform = models.ForeignKey('Platform')

    def __unicode__(self):
        return self.name

    class Meta:
        unique_together = ("platform", "category")

在shell中看起来一切正常,但我无法完全理解的是,在创建新产品时,如何根据平台缩小类别?理想情况下,我可以在管理员屏幕中使用它吗?

这个型号看起来不错还是我能做得更好?

1 个答案:

答案 0 :(得分:0)

我有一种感觉,当您使用管理界面并创建新的Product模型时,您希望能够选择Platform,然后,能够选择一个类别,其中所给出的类别选项仅 那些已与所选Platform相关联的

我的朋友比看上去困难一点。原因是内置于django没有服务器“往返”,在选择Platform之后,Web应用程序访问服务器,收集Category的选项,然后将其显示给您。默认情况下没有这样的选项(尽管如果最终将其作为标准Django包的一部分包含在内,我也不会感到惊讶。)

但是,有一种方法可以通过在javascript / ajax中实现它来实现这一点,根据您的经验,这可能会有些挑战。

好消息是,与Django中的大多数常见任务一样,通常有一个社区应用程序正在开发中或已经可用于满足需求。在这种情况下,可能值得查看django-ajax-filtered-field