我第一次使用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中看起来一切正常,但我无法完全理解的是,在创建新产品时,如何根据平台缩小类别?理想情况下,我可以在管理员屏幕中使用它吗?
这个型号看起来不错还是我能做得更好?
答案 0 :(得分:0)
我有一种感觉,当您使用管理界面并创建新的Product
模型时,您希望能够选择Platform
,,然后,能够选择一个类别,其中所给出的类别选项仅 那些已与所选Platform
相关联的
我的朋友比看上去困难一点。原因是内置于django没有服务器“往返”,在选择Platform
之后,Web应用程序访问服务器,收集Category
的选项,然后将其显示给您。默认情况下没有这样的选项(尽管如果最终将其作为标准Django包的一部分包含在内,我也不会感到惊讶。)
但是,有一种方法可以通过在javascript / ajax中实现它来实现这一点,根据您的经验,这可能会有些挑战。
好消息是,与Django中的大多数常见任务一样,通常有一个社区应用程序正在开发中或已经可用于满足需求。在这种情况下,可能值得查看django-ajax-filtered-field。