python - python django:尝试在序列化程序`PerformerSerializer`上获取字段`username`的值时出现AttributeError
问题描述
各位程序员好,
当我尝试访问我的网址时出现以下错误,请您指出我的代码中的错误。我的序列化程序或视图中是否有任何错误。如果你发现了,我会很高兴的。
username
尝试获取序列化程序上的字段值时出现 AttributeError PerformerSerializer
。序列化器字段可能命名不正确,并且与User
实例上的任何属性或键都不匹配。原始异常文本是:“用户”对象没有属性“用户”。
模型.py
class User(AbstractBaseUser)
:
username = models.CharField(_('Username'), unique=True,max_length=20)
email = models.EmailField(_('Email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
last_login = models.DateTimeField(auto_now=True)
date_joined = models.DateTimeField(auto_now_add=True)
full_name = models.CharField(_("Full Name"), max_length=50,null=True)
date_of_birth = models.DateField(_("Date of birth"), auto_now=False, auto_now_add=False,null=True)
is_verified = models.BooleanField(_("Verified"), default=False)
profileImage = models.ImageField(_('Profile Image'),null=True, upload_to=None, height_field=None, width_field=None, max_length=100)
gender = models.CharField(_("Gender"), max_length=6, choices=GENDER_CHOICES,null=True)
profileTitle = models.CharField(_('Title'), max_length=20,null=True)
profileBio = models.TextField(_('Bio'),null=True)
profileWebsite = models.URLField(_('Website'), max_length=25,null=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email',]
objects = UserManager()
def has_perm(self,perm,obj=None):
return self.is_admin
def has_module_perms(self,app_label):
return True
def __str__(self):
return self.username
def natural_key(self):
return (self.username)
class Song(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(_("Name"), max_length=50)
song = models.FileField(_("Song"), upload_to=None, max_length=100)
song_image = models.ImageField(upload_to=None, height_field=None, width_field=None, max_length=100)
likes = models.IntegerField(_("Likes"),default=0)
views = models.IntegerField(_("Views"),default=0)
performer = models.ManyToManyField('self',verbose_name=_("Performed By"),related_name='artist_in_song')
def performer_user(self, username):
performer = Song.objects.get(user__username=username)
if not self.is_performer(performer):
self.performer.add(performer)
self.save()
return True
return False
def is_performer(self, username):
return self.performer.all().filter(user__username=username).exists()
序列化程序.py
class PerformerSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
class Meta:
model = Song
fields = ('username',)
class UserSerializer(serializers.ModelSerializer):
#id = serializers.ReadOnlyField(source='user.id')
class Meta:
model = User
fields = ('id',)
class SongSerializer(serializers.ModelSerializer):
performer = PerformerSerializer(many=True, read_only= True)
user= UserSerializer(many=False, read_only= True)
class Meta:
model = Song
fields = ('user','performer','id','name','song','song_image','likes','views')
read_only_fields = ('likes','views')
视图.py
class SongCreateView(generics.ListCreateAPIView):
queryset = Song.objects.all()
serializer_class = SongSerializer
permission_classes = [IsAuthenticated]
谢谢你。
解决方案
推荐阅读
- c - C 中的 Tee 函数调用不起作用,也不是 tee 命令
- android - How to get document from "Firestore" using compound query in android
- excel - How to update the range in powerpoint chart from excel
- javascript - When user scrolls down to image position, execute transformation
- javascript - Concise way to get to final output from selenium webdriver promises
- php - 如何在不拒绝访问控制器的情况下使用 Symfony 4 Voters
- ios - 企业应用程序是否会在推送证书和/或配置文件到期/撤销时失效?
- java - AspectJ - 来自外部 JAR 的方面
- kubernetes - RabbitMQ 管理 - 加载队列或交换时出现 404
- javascript - 放弃更改并重置所有数据离子/角度