管理员内联没有外键

时间:2018-04-29 16:43:39

标签: django django-models django-admin

我正在创建一个博客,我是Django的初学者。我有三个型号Slug,Post,Category。

class Slug(models.Model):
    slugable_type = models.CharField(max_length=32)
    slugable_id = models.IntegerField()
    slug = models.CharField(max_length=127)


class Category(models.Model):
    name = models.CharField(max_length=255)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
    parent = models.ForeignKey('Category', on_delete=models.CASCADE)

    def __str__(self):
        return self.title


class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=255)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return self.title

现在在Slug模型中,slugable_type将包含模型名称(Post或Category),slugable_id是该模型对象的id。 通过这种方式,我想在Slug,Post和Category Model之间建立一个多态关系(就像我在Laravel中一样)。其中Category和Post模型的每个对象都只有一个对应的Slug对象。

现在我想在创建帖子或类别时创建一个slug。但是不知道如何在Django管理中注册这三个模型。

至于有内联管理员必须定义一个外键,这在我的情况下是不可能的。

更新

我想这样做的原因是,对于类别或邮寄来说,不会有任何常见的slu ..例如: 考虑一个有一个slug" unique-slug-1'的帖子。所以不可能有一个slug&class-unique-slug-1'。

1 个答案:

答案 0 :(得分:0)

你应该为此设置Generic外键,就我而言,它与Lavarel中的多态关系相同。并且有用于管理面板集成的GenericAdminInline。但实际上它关注的是糟糕的设计,所以最好考虑如何重新设计模型以使用普通的ForeignKey。我建议只创建两个不同的Slug模型,或将slug字段直接移动到Post和Category模型中。此外,您可以使用继承:使用slug字段定义Slug模型并从中继承Post和Category。如果您不需要查询Slug模型,请将abstract = True添加到Slug.Meta