Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 按计数和分组_Django_Django Rest Framework - Fatal编程技术网

Django 按计数和分组

Django 按计数和分组,django,django-rest-framework,Django,Django Rest Framework,我想计算车号字段中的记录数,按国家分组 我的模特 class country(models.Model): country_name = models.CharField(max_length=50, blank=True, default="none") volgorde = models.PositiveIntegerField(blank=True, null=True) def __str__(self): return self.country_

我想计算
车号
字段中的记录数,按
国家分组

我的模特

class country(models.Model):
    country_name = models.CharField(max_length=50, blank=True, default="none")
    volgorde = models.PositiveIntegerField(blank=True, null=True)
    def __str__(self):
        return self.country_name

class car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT)

    def __str__(self):
        return (self.car_number)

    def get_absolute_url(self):
        return reverse("car:list", kwargs={"id":self.id})

    class Meta:
        ordering = ["-car_number"]
我的观点

class CarViewSet(viewsets.ModelViewSet):
    queryset =  car.objects.only('car_country').select_related('car_country')
    serializer_class = CarSerializer


class CountrySerializer(serializers.ModelSerializer):
class Meta:
    model = country
    fields = ('country_name',)

class CarSerializer(serializers.ModelSerializer): 
    car_country = CountrySerializer()

    class Meta:
        model = car
        fields = ('car_number','car_country',)
我现在得到的结果如下:

[
    {
        "car_number": "45678",
        "car_country": {
            "country_name": "Europe/UK"
        }
    },
    {
        "car_number": "3333333",
        "car_country": {
            "country_name": "Europe / Netherlands"
        }
    },
    {
        "car_number": "11111111111",
        "car_country": {
            "country_name": "Europe/UK"
        }
    }
]
你的类名应该以大写字母开头

要返回包含相关
车号数量的国家/地区列表,请首先向您的车型添加以下内容:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
然后,您可以在视图中的查询中使用and,如下所示:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
为了获得正确的输出,我们使用a获取特定
国家的
汽车
对象的计数,如下所示:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
输出应如下所示:

[
    {
        "country_name": "Europe/UK",
        "count_cars": 10
    },
    {
        "country_name": "Netherlands",
        "count_cars": 6
    },
    {
        "country_name": "Belgium",
        "count_cars": 3
    },
]
如果希望输出升序而不是降序,请从
订单中删除
-
。\u by()

根据车辆数量降序排列:

Country.objects.all().annotation(car\u amount=Count('cars')).order\u by('-car\u amount')

基于车辆数量的升序:

Country.objects.all().annotation(car\u amount=Count('cars')).order\u by('car\u amount')

你的类名应该以大写字母开头

要返回包含相关
车号数量的国家/地区列表,请首先向您的车型添加以下内容:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
然后,您可以在视图中的查询中使用and,如下所示:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
为了获得正确的输出,我们使用a获取特定
国家的
汽车
对象的计数,如下所示:

class Car(models.Model):
    car_number = models.CharField(verbose_name='VIN',max_length=11,unique=True,blank=False ,validators=[numeric])
    car_country = models.ForeignKey('Country', verbose_name='Country',blank=True, null=True, default=1, on_delete=models.PROTECT, related_name='cars')
from django.db.models import Count

class CarViewSet(viewsets.ModelViewSet):
    queryset =  Country.objects.all().annotate(car_amount=Count('cars')).order_by('-car_amount')
    serializer_class = CountrySerializer
class CountrySerializer(serializers.ModelSerializer):
    count_cars = serializers.SerializerMethodField(read_only=True)

    def get_count_cars(model):
        return model.cars.all().count()

    class Meta:
        model = Country
        fields = ('country_name' 'count_cars',)
输出应如下所示:

[
    {
        "country_name": "Europe/UK",
        "count_cars": 10
    },
    {
        "country_name": "Netherlands",
        "count_cars": 6
    },
    {
        "country_name": "Belgium",
        "count_cars": 3
    },
]
如果希望输出升序而不是降序,请从
订单中删除
-
。\u by()

根据车辆数量降序排列:

Country.objects.all().annotation(car\u amount=Count('cars')).order\u by('-car\u amount')

基于车辆数量的升序:


Country.objects.all().annotation(car\u amount=Count('cars')).order\u by('car\u amount')

您的车型是什么样子的?您好,我添加了车型谢谢。我真的不确定你想要的输出是什么。你想精确计算哪些字段?我修改了我的问题。结果应该是一个国家(按顺序)和(计数)车号的列表。请参阅我的更新答案您的车型是什么样子的?嗨,Stevy,我添加了车型谢谢。我真的不确定你想要的输出是什么。你想精确计算哪些字段?我修改了我的问题。结果应该是一个国家列表(按顺序排列)和(计数)汽车号码。请参阅我的更新答案