在Django中按用户选项切换ForeignKey

时间:2014-07-31 09:32:44

标签: python django-models django-admin

让我们看看第一个应用程序(非常简单)

app name = family;机型:

class Parent(models.Model):
    name       = models.CharFiled(max_length="30")
    title      = models.CharField(max_length="30")
    work_title = models.CharField(max_length="30")

class Child(models.Model):
    name        = models.CharField(max_length="30")
    school_year = models.IntegerField(max_length="30")

然后我有另一个应用程序,需要根据用户选择为家庭应用程序中的2个类创建一个foregin键,让我们看看下一个示例:

app name = persons,models:

class Info(models.Model):
    code          = models.CharField(max_length="30")
    family_member = models.CharField(max_length="1", choices=(('1', 'Parent'),('2', 'Child'),))
    person        = models.ForeignKey('family.???') #here is where I have the issue

如何根据family_member中的用户选择构建ForeignKey?因此,如果用户选择Parent(1),则ForeignKey应指向Parrent类,但如果用户选择Child(2),则foreignKey应指向Child

我想在models.py中搜索解决方案,而不是在视图中修复问题 - 如果可能的话。

2 个答案:

答案 0 :(得分:0)

您可能希望将GenericForeignKey用于该任务。请参阅the docs

答案 1 :(得分:0)

您可以从一个类继承Parent和Child,并使外键指向它:

class Person(models.Model):
    name = models.CharField(max_length="30")

class Parent(Person):
    title      = models.CharField(max_length="30")
    work_title = models.CharField(max_length="30")

class Child(Person):
    school_year = models.IntegerField(max_length="30")

和人:

class Info(models.Model):
    code          = models.CharField(max_length="30")
    family_member = models.CharField(max_length="1", choices=(('1', 'Parent'),('2', 'Child'),))
    person        = models.ForeignKey('family.Person')

虽然在这种情况下,用户可以独立于family_member选择选择子级或父级,除非您过滤用户的选择,例如,如果他选择family_member'Child',则只允许他选择Child模型对象,反之亦然