Итак, я работаю над API.Запрос GET, имеющий условие для генерации одного или другого поля рендеринга.Но, к моему удивлению, is None
не работает для пустого поля.Как мне решить эту проблему?
Вот моя таблица, например :
--------------------------------------------------------------------------
| ms | offer_id | priprity_one | priority_two | priority_three
--------------------------------------------------------------------------
| 89899 | | priority_one | priority_two | priority_three
| 32323 | 3021 | priority_one | priority_two | priority_three
| 12321 | 3022 | priority_one | priority_two | priority_three
| 43421 | 3023 | priority_one | priority_two | priority_three
views.py
from mamo.models import Mamo
from rest_framework import generics
from mamo.serializers import MamoSerializer
from django.http import Http404
from IPython import embed
class OfferView(generics.ListAPIView):
serializer_class = MamoSerializer
lookup_field = 'ms'
def get_queryset(self):
msisdn = self.kwargs['ms']
try:
return Mamo.objects.filter(ms=ms)
except Mamo.DoesNotExist:
raise Http404
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
serializer = self.serializer_class(queryset, many=True)
if serializer.data[0]['offer_id'] is not None:
result = serializer.data[0]['priority_one']
elif serializer.data[0]['offer_id'] is None: # This line dont work
result = serializer.data[0]['priority_two']
else:
result = serializer.data[0]['priority_three']
return Response(result)
models.py
class Basic(models.Model):
ms = models.BigIntegerField(db_index=True, blank=False, help_text="Customer")
offer_id = models.CharField(max_length=20, null=True, blank=True)
priority_one = models.CharField(max_length=350, null=True, blank=True, default='cleaner')
priority_two = models.CharField(max_length=350, null=True, blank=True, default='cleaner')
priority_three = models.CharField(max_length=350, null=False, default='cleaner')
class Meta:
#ordering = ('ms',)
db_table = 'offer_table'
def __str__(self):
return self.ms
Чтобы это работало, это то, что я сделал ниже, но я считаю, что это не имеет смысла.Я предпочту любой другой способ.
if len(serializer.data[0]['offer_id']) > 0:
result = serializer.data[0]['eligible_offer']
elif len(serializer.data[0]['offer_id']) == 0:
result = serializer.data[0]['market_offer']
else:
result = serializer.data[0]['informational_offer']
return Response(result)
Примечание. Я использую DRF.Я также позвонил is empty
на ту часть, которая не работает, она все еще не работает. Значение, когда поле в базе данных пустое, как я показал в базе данных , elif serializer.data[0]['offer_id'] is None
Условная часть должна вступить в силу, но не ответить .
Iиспользовал embed
для отладки, и вот что я получаю:
n [11]: serializer.data[0]['offer_id']
Out[11]: u''
In [12]: serializer.data[0]['offer_id'] is None
Out[12]: False
In [13]: serializer.data[0]['offer_id'] is empty
Out[13]: False