私がこれらのモデルを持っているとします(非実用的なコードですが、これは単なる例です):
class BaseArticle(models.Model):
title = models.CharField(max_length=512)
author = models.ForeignKey(User)
content = models.TextField()
class Meta:
abstract = True
class ArticleWithColor(BaseArticle):
color = models.CharField(max_length=512)
class ArticleTypeWithSmell(BaseArticle):
smell = models.CharField(max_length=512)
アーティクル(カラーまたは匂い記事)を保存するときに、共有フィールド(BaseArticleフィールド)に同じ値を持つ他の既存のインスタンスが存在するかどうかをチェックしたいと思います。
言い換えれば:どのように私は私が保存しようとしているArticleWithSmellとしてBaseArticleから継承したフィールドのための同じ値を持つArticleWithColorが既に存在するかどうかを確認することができますか?
私はすべての子供モデルを照会するために私の答えを更新しました。これは、モデルリストを作成する唯一の方法です。あなたのユースケースによって異なります。
あなたはおそらくそれらの行に沿って何かをすることができます(まだテストされていません):
class BaseArticle(models.Model):
title = models.CharField(max_length=512)
author = models.ForeignKey(User)
content = models.TextField()
_childrens = set()
# register the model on init
def __init__(self, *args, **kwargs):
super(BaseArticle, self).__init__(*args, **kwargs)
BaseArticle._childrens.add(self.__class__)
def save(self, *args, **kwargs):
for model in BaseArticle._childrens:
query = model.objects.filter(title=self.title, author=self.author, content=self.content)
# if this Article is already saved, exclude it from the search
if self.pk and model is self.__class__:
query.exclude(pk=self.pk)
if query.count():
# there's one or more articles with the same values
do_something()
break
super(BaseArticle, self).save(*args, **kwargs)
class Meta:
abstract = True