【发布时间】:2022-01-07 16:00:49
【问题描述】:
我想在序列化程序中添加一个字段,该字段对单词(标签)的所有出现次数进行计数。
Models.py 中的 2 个相关模型是:
class Tag(models.Model):
name = models.CharField(max_length=256)
language = models.CharField(max_length=256)
objects = models.Manager()
def __str__(self):
return self.name or ''
class Tagging(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True)
gameround = models.ForeignKey(Gameround, on_delete=models.CASCADE)
resource = models.ForeignKey(Resource, on_delete=models.CASCADE, related_name='taggings')
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
created = models.DateTimeField(editable=False)
score = models.PositiveIntegerField(default=0)
# media_type = models.ForeignKey(Gamemode, on_delete=models.CASCADE)
origin = models.URLField(max_length=256, blank=True, default='')
objects = models.Manager()
def __str__(self):
return str(self.tag) or ''
def save(self, *args, **kwargs):
if not self.id:
self.created = timezone.now()
return super().save(*args, **kwargs)
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(verbose_name='email address', unique=True)
username = models.CharField(max_length=256, unique=True, blank=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=256, null=True)
last_name = models.CharField(max_length=256, null=True)
date_joined = models.DateTimeField(editable=False, default=timezone.now)
is_superuser = models.BooleanField(default=False)
date_joined = models.DateTimeField(default=timezone.now)
is_uploader = models.BooleanField(default=False)
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
updated_at = models.DateTimeField(auto_now=True)
REQUIRED_FIELDS = ['username']
objects = CustomUserManager()
USERNAME_FIELD = 'email'
def get_username(self):
return self.username
def __str__(self):
return f'{self.email} ({self.username})' or ''
我要写的序列化器是:
class TagCountSerializer(serializers.ModelSerializer):
tag = TagSerializer(read_only=True)
tag_count = serializers.SerializerMethodField('get_tag_count')
class Meta:
model = Tagging
fields = ('id', 'tag', 'gameround', 'resource', 'tag_count')
def get_tag_count(self, obj):
# return obj.tag.all().count()
tag_count = Tagging.objects.filter(tag=obj.tag).count()
return tag_count
def to_representation(self, data):
data = super().to_representation(data)
return data
我已经为 get_tag_count() 方法尝试了几种可能的解决方案,包括此处可见的解决方案,但我不断收到此错误“无法查询“标签名称”:必须是“标签”实例。” 有谁知道我该如何解决这个问题?
【问题讨论】:
-
分享完整的错误回溯
标签: python django rest django-rest-framework