根据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 (将#修改为@)