Django.core.exceptions.FieldError: Невозможно преобразовать ключевое слово 'date' в поле. Объединение по 'date' не разрешено
# Here is my models
Это моя модель CustmerBuySell, разработанная БД.
class CustomerBuySell(models.Model):
customer = models.ForeignKey(CustomerAdd, on_delete=models.CASCADE)
customer_buy_sell_debit = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
customer_buy_sell_credit = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
description = models.CharField(max_length=250, blank=True)
date = models.DateField()
sms = models.BooleanField(default=False)
picture = models.ImageField(upload_to='customer_buy_sell_pics', default='images.png')
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
def __str__(self):
return self.customer.customer_name
class Meta:
verbose_name = "Customer BuySell"
verbose_name_plural = "Customer BuySell"
# Here, is my View.
Это APIView на основе класса, который я использовал. Попробуйте использовать агрегированный запрос в этом представлении.
class DailyCustomerBuySellAPIView(APIView):
def get(self, request):
customer_buy_sell = CustomerBuySell.objects.extra(select={'day': 'date( date )'}).values('day').order_by(
'date__date').annotate(available=Count('date__date'))
serializer = CustomerBuySellSerializer(customer_buy_sell, many=True)
return Response({"customer_buy_sell": serializer.data})
# And, finally here are my Serializers
Я понятия не имею, в чем проблема! Пожалуйста, помогите мне.
class CustomerBuySellSerializer(serializers.ModelSerializer):
# customer = CustomerAddSerializer()
class Meta:
model = CustomerBuySell
fields = '__all__'
def to_representation(self, instance):
representation = super(CustomerBuySellSerializer, self).to_representation(instance)
if instance.customer is not None:
customer_name = instance.customer.customer_name
previous_due = instance.customer.previous_due
representation['custo`enter code here`mer_name'] = customer_name
representation['previous_due'] = previous_due
return representation
Полагаю, что это просто опечатка: Замените date__date на date
В вашем подходе есть много проблем. Позвольте мне упомянуть каждую из них по очереди:
- Прежде всего, удалите date__date из вашего APIVIew .
Перед:
customer_buy_sell = CustomerBuySell.objects.extra(select={'day': 'date( date )'}).values('day').order_by(
'date__date').annotate(available=Count('date__date'))
Вместо этого запишите его как:
from django.db.models.functions import Extract
customer_buy_sell = CustomerBuySell.objects.annotate(day=Extract('date','day')).values('day').order_by('day')
если вам нужен подсчет дней, то вы можете попробовать
customer_buy_sell_count = customer_buy_sell.count()
Еще одна вещь, которую вы делаете неправильно - вы передаете dict в сериализатор, поскольку вы уже используете
values, который возвращает словарь дней, а не объектCustomerBuySell, поэтому вам не нужно передавать его в сериализатор, иначе вы должны сделать это в соответствии с вашими потребностями.В
CustomerBuySellSerializerвы используете сериализатор модели с__all__, при этом вы передаете дополнительное поле day, которое не является его частью.