python - Django类继承创建table表

标签 python django

我开始学习 Django 并为 MySQL 数据库设置模型。我希望我的一个类继承另一个类,以便属性继承到表中。

from django.db import models

class Images(models.Model):
    category    = models.ForeignKey(Categories)
    title       = models.CharField(max_length=250)
    caption     = models.CharField(max_length=250)
    date        = models.DateTimeField('date published')
    url         = models.CharField(max_length=250)

    class Meta:
        verbose_name_plural = 'images'

    def __unicode__(self):
        return self.category

class Videos(Images):

    provider_list   = (('YU','YouTube'),('VI','Vimeo'))
    provider        = models.CharField(max_length=2, choices=provider_list)

    class Meta:
        verbose_name_plural = 'videos'

    def __unicode__(self):
        return self.category

然而,当我运行 python manage.py syncdb 时,表“videos”只有一个主 ID 列和一个提供者列。是否有必要重新声明 Images 中的所有列并将 Videos 设置为完全独立的类,或者我是否可以将所有这些列继承到 Videos 类中?

最佳答案

2 件事:

1)可以考虑使用抽象基类

2) 在你的选择中对常量使用全大写

要回答您的问题,您不需要重新声明所有列。

from django.db import models

class BaseMedia(models.Model):
    category    = models.ForeignKey(Categories)
    title       = models.CharField(max_length=250)
    caption     = models.CharField(max_length=250)
    date        = models.DateTimeField('date published')
    url         = models.CharField(max_length=250)

    class Meta:
        abstract = True

class Images(BaseMedia):

    class Meta:
        verbose_name_plural = 'images'

    def __unicode__(self):
        return self.category

class Videos(BaseMedia):

    PROVIDER_LIST_CHOICES   = (('YU','YouTube'),('VI','Vimeo'))
    provider        = models.CharField(max_length=2, choices=PROVIDER_LIST_CHOICES)

    class Meta:
        verbose_name_plural = 'videos'

    def __unicode__(self):
        return self.category

关于python - Django类继承创建table表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100572/

相关文章:

python - 为什么在 Python 中安装 pycrypto 后无法导入 Crypto?

python - Django UUIDField 从 varchar(36) 截断为 char(32)

django - 在 Django 中使用 settings.py 以外的设置文件

python - 有很多页面的 Django 分页器

python - Django - 根据用户组过滤下拉选项

django - most_common 与 django-taggit

python - python中的 strip 空格

python - 将多项式回归从 R 移植到 python

python - 如何在Python中将 Sprite 设置为矩阵中的数字

python - 在 python 中模拟传值行为