微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据Django国家字段过滤查询集

如何解决根据Django国家字段过滤查询集

这是我的观点:

class PollViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Poll.objects.all()
    serializer_class = PollSerializer()

    def get_queryset(self):
        country = self.kwargs.get('pk',None)
        if country is not None:
            django_countries.Countries.name(country)
            return self.queryset.filter(personality__country__name=country)
        else:
            country = self.request.user.preferred_country
            return self.queryset.filter(personality__country=country)

model.py:

from django_countries.fields import CountryField



    class Personality(models.Model):
        name = models.CharField(max_length=100)
        bio = models.TextField()
        age = models.IntegerField()
    
        class Gender(models.TextChoices):
            MALE = 'MALE',_('Male')
            FEMALE = 'FEMALE',_('Female')
            OTHER = 'OTHER',_('Other')
    
        gender = models.CharField(
            max_length=6,choices=Gender.choices,default=Gender.MALE,)
    
        country = CountryField(null=True)
        picture = models.ImageField(upload_to='uploads/profile_images/%Y/%m/%d')
    
        created_at = models.DateTimeField(auto_Now_add=True)
        updated_at = models.DateTimeField(auto_Now=True)
    
        def __str__(self):
            return self.name



    class Poll(RulesModel):
        personality = models.OnetoOneField(Personality,related_name='polls',on_delete=models.CASCADE)
        start_date = models.DateTimeField(null=True)
        end_date = models.DateTimeField(null=True)
    
        created_at = models.DateTimeField(auto_Now_add=True)
        updated_at = models.DateTimeField(auto_Now=True)
    
        def __str__(self):
            return 'poll#' + str(self.id) + ' ' + self.personality.name

Urls.py

from django.conf.urls.static import static
from django.urls import path,include

from liderate import settings
from .views import PollViewSet,PersonalityViewSet,PollListViewSet

from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'polls',PollViewSet)
router.register(r'polls-list',PollListViewSet)
router.register(r'personalities',PersonalityViewSet)

urlpatterns = [
    path('',include(router.urls)),]

在这里引发了一个例外,即“ CountryField的不支持的查找'名称'或不允许在字段上加入。”

这是在if条件下引发的(其他条件可以很好地工作)。还有其他方法可以根据国家/地区的名称过滤查询

我实际上只想查看与在获取网址中作为参数传递的国家/地区有关的民意调查

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。