我们如何将DRF Serializerthodfield与Django-Filters Backend一起使用
获得错误喜欢这个。
我无法理解如何在这里创建逻辑,请创建一些逻辑(对我来说很有趣)。这是错误:
fielderror at/api/website/embly/ 无法将关键字“ IS_YOU”解析为字段。选择是:关于,地址,年龄,头像, blocked_author, blocked_person, blog, blogcategory, blogtag, bookmark_author, bookmark_person, children, city, country, created_at, date_joined, education, email, employement, ethnicity, eye_color, faq, favourite_author, favourite_person, first_name, gender, groups, hair_color, height, hidden_author,hidden_person,id,收入,兴趣,is_active,is_online,is_online_show,is_Staff,is_superuser,语言,last_login,last_name,logentry,logentry,logentry,fooking,fooke,passwork,passwass,passwass,passwork,phone,电话,电话,电话,电话, 邮政,省,关系,宗教,skin_color,烟,运动,星,状态,更新,user_permissions,用户名,验证,重量
在这里是错误:
用户模型(models.py)
class User(AbstractUser):
username = models.CharField('username', max_length=150, unique=True)
email = models.EmailField('email address', unique=True, max_length=255)
first_name = models.CharField(max_length=250, null=True, blank=True)
last_name = models.CharField(max_length=250, null=True, blank=True)
phone = models.CharField(max_length=15, null=True, blank=True)
about = models.CharField(max_length=1000, null=True, blank=True)
country = models.CharField(max_length=100, null=True, blank=True)
province = models.CharField(max_length=100, null=True, blank=True)
city = models.CharField(max_length=100, null=True, blank=True)
postal = models.CharField(max_length=100, null=True, blank=True)
address = models.CharField(max_length=500, null=True, blank=True)
gender = models.CharField(max_length=500, null=True, blank=True)
age = models.CharField(max_length=500, null=True, blank=True)
is_online = models.BooleanField(null=True, blank=True)
is_online_show = models.BooleanField(null=True, blank=True)
looking = models.CharField(max_length=100, null=True, blank=True)
employement = models.CharField(max_length=50, null=True, blank=True)
education = models.CharField(max_length=500, null=True, blank=True)
religion = models.CharField(max_length=50, null=True, blank=True)
star = models.CharField(max_length=50, null=True, blank=True)
smoke = models.CharField(max_length=500, null=True, blank=True)
language = models.CharField(max_length=500, null=True, blank=True)
ethnicity = models.CharField(max_length=500, null=True, blank=True)
relationship = models.CharField(max_length=500, null=True, blank=True)
height = models.CharField(max_length=500, null=True, blank=True)
weight = models.CharField(max_length=500, null=True, blank=True)
eye_color = models.CharField(max_length=500, null=True, blank=True)
hair_color = models.CharField(max_length=500, null=True, blank=True)
skin_color = models.CharField(max_length=500, null=True, blank=True)
children = models.CharField(max_length=500, null=True, blank=True)
income = models.CharField(max_length=500, null=True, blank=True)
sports = models.CharField(max_length=500, null=True, blank=True)
interests = models.CharField(max_length=500, null=True, blank=True)
avatar = fields.ImageField(
upload_to="avatars", blank=True, null=True, default="avatar.png")
status = models.CharField(max_length=1, choices=statuses, default='1')
verified = models.CharField(max_length=1, choices=(
('1', 'Yes'), ('0', 'No')), default='1')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
成员(serializers.py.py)
class MemberSerializer(serializers.ModelSerializer):
bookmark = serializers.SerializerMethodField('get_bookmark')
is_you = serializers.SerializerMethodField('get_you')
class Meta:
model = User
fields = (
'id', 'username', 'first_name', 'last_name', 'email', 'phone', 'about', 'country', 'province', 'city',
'postal', 'address', 'status', 'verified', 'avatar', 'gender', 'age', 'is_online', 'is_online_show', 'looking', 'employement', 'education',
'religion', 'star', 'smoke', 'language', 'ethnicity', 'relationship', 'height', 'weight', 'eye_color', 'hair_color',
'skin_color', 'children', 'income', 'sports', 'interests', 'is_staff', 'is_superuser', 'is_active', 'created_at', 'updated_at',
'bookmark','is_you')
def get_bookmark(self, obj):
LoginUser = self.context.get('request').user.id
BookmarkUser = Bookmark.objects.filter(
member_id=obj.id, created_by=LoginUser).first()
try:
return {'bookmark': True, 'id': BookmarkUser.id}
except:
return {'bookmark': False, 'id': None}
def get_you(self, obj):
user = self.context.get('request').user.id
if user == obj.id:
return True
return False
成员视图views.py)
class MemberApi(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = MemberSerializer
filter_class = MemberFilter
filter_backends = [DjangoFilterBackend, OrderingFilter, SearchFilter]
filterset_fields = ['id', 'username', 'first_name',
'last_name', 'email', 'phone','is_online','is_you']
search_fields = ['id', 'username', 'first_name',
'last_name', 'email', 'phone','is_online']
ordering = ['-id']
pagination_class = pagination
# authentication_classes = authclass
# permission_classes = [IsAuthenticated]
路线(urls.py)
router.register("member", MemberApi, basename="WebsiteMemberApi")
Getting an error likes this.
I am not able to understand that how to create a logic here please create some logic(for me it interesting). Here is the error:
FieldError at /api/website/member/
Cannot resolve keyword 'is_you' into field. Choices are: about, address, age, avatar,
blocked_author, blocked_person, blog, blogcategory, blogtag, bookmark_author, bookmark_person, children, city, country, created_at, date_joined, education, email, employement, ethnicity, eye_color, faq, favourite_author, favourite_person, first_name, gender, groups, hair_color, height, hidden_author, hidden_person, id, income, interests, is_active, is_online, is_online_show, is_staff, is_superuser, language, last_login, last_name, logentry, looking, password, phone,
postal, province, relationship, religion, skin_color, smoke, sports, star, status, updated_at, user_permissions, username, verified, weight
Here is the error:
User model (Models.py)
class User(AbstractUser):
username = models.CharField('username', max_length=150, unique=True)
email = models.EmailField('email address', unique=True, max_length=255)
first_name = models.CharField(max_length=250, null=True, blank=True)
last_name = models.CharField(max_length=250, null=True, blank=True)
phone = models.CharField(max_length=15, null=True, blank=True)
about = models.CharField(max_length=1000, null=True, blank=True)
country = models.CharField(max_length=100, null=True, blank=True)
province = models.CharField(max_length=100, null=True, blank=True)
city = models.CharField(max_length=100, null=True, blank=True)
postal = models.CharField(max_length=100, null=True, blank=True)
address = models.CharField(max_length=500, null=True, blank=True)
gender = models.CharField(max_length=500, null=True, blank=True)
age = models.CharField(max_length=500, null=True, blank=True)
is_online = models.BooleanField(null=True, blank=True)
is_online_show = models.BooleanField(null=True, blank=True)
looking = models.CharField(max_length=100, null=True, blank=True)
employement = models.CharField(max_length=50, null=True, blank=True)
education = models.CharField(max_length=500, null=True, blank=True)
religion = models.CharField(max_length=50, null=True, blank=True)
star = models.CharField(max_length=50, null=True, blank=True)
smoke = models.CharField(max_length=500, null=True, blank=True)
language = models.CharField(max_length=500, null=True, blank=True)
ethnicity = models.CharField(max_length=500, null=True, blank=True)
relationship = models.CharField(max_length=500, null=True, blank=True)
height = models.CharField(max_length=500, null=True, blank=True)
weight = models.CharField(max_length=500, null=True, blank=True)
eye_color = models.CharField(max_length=500, null=True, blank=True)
hair_color = models.CharField(max_length=500, null=True, blank=True)
skin_color = models.CharField(max_length=500, null=True, blank=True)
children = models.CharField(max_length=500, null=True, blank=True)
income = models.CharField(max_length=500, null=True, blank=True)
sports = models.CharField(max_length=500, null=True, blank=True)
interests = models.CharField(max_length=500, null=True, blank=True)
avatar = fields.ImageField(
upload_to="avatars", blank=True, null=True, default="avatar.png")
status = models.CharField(max_length=1, choices=statuses, default='1')
verified = models.CharField(max_length=1, choices=(
('1', 'Yes'), ('0', 'No')), default='1')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
MemberSerializer (Serializers.py)
class MemberSerializer(serializers.ModelSerializer):
bookmark = serializers.SerializerMethodField('get_bookmark')
is_you = serializers.SerializerMethodField('get_you')
class Meta:
model = User
fields = (
'id', 'username', 'first_name', 'last_name', 'email', 'phone', 'about', 'country', 'province', 'city',
'postal', 'address', 'status', 'verified', 'avatar', 'gender', 'age', 'is_online', 'is_online_show', 'looking', 'employement', 'education',
'religion', 'star', 'smoke', 'language', 'ethnicity', 'relationship', 'height', 'weight', 'eye_color', 'hair_color',
'skin_color', 'children', 'income', 'sports', 'interests', 'is_staff', 'is_superuser', 'is_active', 'created_at', 'updated_at',
'bookmark','is_you')
def get_bookmark(self, obj):
LoginUser = self.context.get('request').user.id
BookmarkUser = Bookmark.objects.filter(
member_id=obj.id, created_by=LoginUser).first()
try:
return {'bookmark': True, 'id': BookmarkUser.id}
except:
return {'bookmark': False, 'id': None}
def get_you(self, obj):
user = self.context.get('request').user.id
if user == obj.id:
return True
return False
Member viewsets.ReadOnlyModelViewSet (Views.py)
class MemberApi(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = MemberSerializer
filter_class = MemberFilter
filter_backends = [DjangoFilterBackend, OrderingFilter, SearchFilter]
filterset_fields = ['id', 'username', 'first_name',
'last_name', 'email', 'phone','is_online','is_you']
search_fields = ['id', 'username', 'first_name',
'last_name', 'email', 'phone','is_online']
ordering = ['-id']
pagination_class = pagination
# authentication_classes = authclass
# permission_classes = [IsAuthenticated]
Route (Urls.py)
router.register("member", MemberApi, basename="WebsiteMemberApi")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为您需要从
filterset_fields
列表中删除is_you
。I think you need to remove
is_you
from thefilterset_fields
list.这是你想要的
Here's what you want