3

私は2つの異なるモデルを持っています。

class MessageArchive(models.Model):
    from_user = models.CharField(null=True, blank=True, max_length=300)
    archived_time = models.DateTimeField(auto_now_add=True)
    label = models.ForeignKey(MessageLabel, null=True, blank=True)
    archived_by = models.ForeignKey(OrgStaff)
    tags = TaggableManager()

spamここで、メッセージの, todo,urgentタグを定義したとします。

そして、私は別のモデルを持っています:

class PersonArchive(models.Model):
        from_user = models.CharField(null=True, blank=True, max_length=300)
        archived_time = models.DateTimeField(auto_now_add=True)
        label = models.ForeignKey(MessageLabel, null=True, blank=True)
        archived_by = models.ForeignKey(OrgStaff)
        tags = TaggableManager()

モデルの人物をawesomelegend、と定義します。rockstar定義されるものはさらに少ないかもしれません。

明らかなように、人物とメッセージのタグを重複させたくありません。どうすればそれを達成できますか?ありがとう!

4

3 に答える 3

0

これを自分で処理しました。特定のモデルのタグのみをフィルタリングする方法を見つけたので、タグを混在させることにしました。これは のタグのみをフィルタリングしますmodelname。必要に応じてフィルターを拡張できます。

Tag.objects.filter(taggit_taggeditem_items__content_type__model='modelname')
于 2020-01-20T21:07:51.260 に答える
0

ForeignKeyFields と ManyToManyFields でlimit_choices_to機能を利用できます。models.py ファイルは次のようになります。

class PersonArchive(models.Model):
    tags_field = models.ManyToManyField(Tag, related_name="people_archives", limit_choices_to={'message_archives__isnull': True})

class MessageArchive(models.Model):
    tags_field = models.ManyToManyField(Tag, related_name="message_archives", limit_choices_to={'people_archives__isnull': True})
于 2013-08-13T12:05:18.413 に答える