如何在同一模型中具有两个标签字段,即两个Taggable Manager?

时间:2020-09-15 16:03:56

标签: python django django-taggit

我有一个用于上传文件的模型,现在我需要在该模型中有两个标签字段。一种用于用户标签,另一种用于管理员标签。我已经尝试了几种解决方案,但是都没有用。

这是我的代码,现在不起作用。不知道这是否要创建两个单独的表,一个用于用户标签和管理标签,因此将不胜感激。另外,如果您可以向我解释因为迷路而正在做什么。

program_spec.rb

1 个答案:

答案 0 :(得分:0)

我会尝试像这样实现它。

from django.db import models
from taggit.managers import TaggableManager
from taggit.models import TaggedItemBase, ItemBase


class AdminTag(ItemBase):
    pass


class UserTag(ItemBase):
    pass


class ThroughAdminTag(TaggableManager):
    content_object = models.ForeignKey('AdminTag', on_delete=models.CASCADE)


class ThroughUserTag(TaggableManager):
    content_object = models.ForeignKey('UserTag', on_delete=models.CASCADE)


# Model for all uploaded files
class Uploaded(models.Model):
    objects = models.Manager()
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="users")
    time_uploaded = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=50)
    file = models.FileField(upload_to=MEDIA_ROOT)
    tag = TaggableManager(blank=True, through=ThroughUserTag, related_name='user_tags')
    tags = TaggableManager(blank=True, through=ThroughAdminTag, related_name='admin_tags')
    additional_description = models.CharField(max_length=50, blank=True)

    def __str__(self):
        return f"{self.name} {self.file}"

不确定AdminTagUserTag是否需要任何字段。从理论上讲,从ItemBase继承它们应该可以解决这一问题。

相关问题