Создайте подкласс, чтобы не повторять совпадающие поля - PullRequest
0 голосов
/ 06 апреля 2020

Я создал две модели классов в Django. Есть ли способ не повторять одинаковые совпадающие поля, сохраняя их в другом классе или переменной?

Вот что я получил:

class Post(models.Model):
    title = models.CharField(max_length=50)
    content = RichTextField(blank=True)
    category = models.ForeignKey(Category, verbose_name="Category", on_delete=models.CASCADE)
    posted_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    slug = models.SlugField(null=True, unique=True, editable=False)

    def __str__(self):
            return str(self.category) + self.slug + " " + str(self.id)

    def save(self, *args, **kwargs):
        self.slug = slugify(str(self.category)) + "/" + slugify(self.title+str(-self.id))
        super(Post, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

class Post2(models.Model):
    title = models.CharField(max_length=50)
    content = RichTextField(blank=True)
    category = models.ForeignKey(Category, verbose_name="Category", on_delete=models.CASCADE)
    posted_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    slug = models.SlugField(null=True, unique=True, editable=False)

    def __str__(self):
            return str(self.category) + self.slug + " " + str(self.id)

    def save(self, *args, **kwargs):
        self.slug = slugify(str(self.category)) + "/" + slugify(self.title+str(-self.id))
        super(Post2, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

1 Ответ

2 голосов
/ 06 апреля 2020

Я думаю, что вы пытаетесь выяснить класс модели abstract.

Вы можете создать класс абстрактной модели, установив abstract=True в классе Meta модели.

class AbstractPost(models.Model):
    title = models.CharField(max_length=50)
    # common fields and functions

    <b>class Meta:
        abstract = True</b>


class Post(<b>AbstractPost</b>): # inherit the abstract base class
    pass


class Post2(<b>AbstractPost</b>):
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...