问题描述
这是我的观点:
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 (将#修改为@)