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

В вашем подходе есть много проблем. Позвольте мне упомянуть каждую из них по очереди:

  1. Прежде всего, удалите date__date из вашего APIVIew
  2. .

Перед:

 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() 
  1. Еще одна вещь, которую вы делаете неправильно - вы передаете dict в сериализатор, поскольку вы уже используете values, который возвращает словарь дней, а не объект CustomerBuySell, поэтому вам не нужно передавать его в сериализатор, иначе вы должны сделать это в соответствии с вашими потребностями.

  2. В CustomerBuySellSerializer вы используете сериализатор модели с __all__, при этом вы передаете дополнительное поле day, которое не является его частью.

<<<Отличный способ исправить такие проблемы - обратиться к опытному программисту, чтобы он смог улучшить поток кода. Позже вы сможете сосредоточиться на логике.

Вернуться на верх