updated testapp
parent
be72e7c5c9
commit
fcbf7c40dc
|
|
@ -4,8 +4,7 @@ from django.contrib import admin
|
|||
from more_filters import (
|
||||
MultiSelectFilter, MultiSelectRelatedFilter, MultiSelectDropdownFilter,
|
||||
MultiSelectRelatedDropdownFilter, DropdownFilter, ChoicesDropdownFilter,
|
||||
RelatedDropdownFilter, PlusMinusFilter, AnnotationListFilter,
|
||||
BooleanAnnotationListFilter
|
||||
RelatedDropdownFilter, BooleanAnnotationFilter
|
||||
)
|
||||
from .models import ModelA
|
||||
from .models import ModelB
|
||||
|
|
@ -23,6 +22,8 @@ class ModelAAdmin(admin.ModelAdmin):
|
|||
'related_dropdown',
|
||||
'multiselect_related',
|
||||
'multiselect_related_dropdown',
|
||||
'annotation_view',
|
||||
'boolean_annotation_view',
|
||||
)
|
||||
|
||||
list_filter = (
|
||||
|
|
@ -34,4 +35,11 @@ class ModelAAdmin(admin.ModelAdmin):
|
|||
('related_dropdown', RelatedDropdownFilter),
|
||||
('multiselect_related', MultiSelectRelatedFilter),
|
||||
('multiselect_related_dropdown', MultiSelectRelatedDropdownFilter),
|
||||
BooleanAnnotationFilter.init('boolean_annotation'),
|
||||
)
|
||||
|
||||
def annotation_view(self, obj):
|
||||
return obj.annotation
|
||||
|
||||
def boolean_annotation_view(self, obj):
|
||||
return obj.boolean_annotation
|
||||
|
|
@ -7,7 +7,7 @@ from django.core.management.base import CommandError
|
|||
from django.contrib.auth.models import User
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from ...models import ModelA, ModelB
|
||||
from ...models import ModelA, ModelB, ModelC
|
||||
|
||||
|
||||
def create_test_data():
|
||||
|
|
@ -23,12 +23,17 @@ def create_test_data():
|
|||
ModelA.objects.all().delete()
|
||||
ModelB.objects.all().delete()
|
||||
|
||||
c_models = list()
|
||||
for i in range(1, 30):
|
||||
model_a = ModelA()
|
||||
model_b = ModelB()
|
||||
model_c = ModelC()
|
||||
|
||||
model_b.id = i
|
||||
model_b.save()
|
||||
model_c.id = i
|
||||
model_c.save()
|
||||
c_models.append(model_c)
|
||||
|
||||
model_a.dropdown_less_than_four = i % 3
|
||||
model_a.dropdown_more_than_three = i % 4
|
||||
|
|
@ -39,6 +44,7 @@ def create_test_data():
|
|||
model_a.multiselect_related = model_b
|
||||
model_a.multiselect_related_dropdown = model_b
|
||||
model_a.save()
|
||||
model_a.c_models.set(c_models)
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.0.10 on 2020-09-04 22:23
|
||||
# Generated by Django 3.0.10 on 2020-09-05 08:09
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
|
@ -18,6 +18,12 @@ class Migration(migrations.Migration):
|
|||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ModelC',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ModelA',
|
||||
fields=[
|
||||
|
|
@ -27,6 +33,7 @@ class Migration(migrations.Migration):
|
|||
('multiselect', models.IntegerField()),
|
||||
('multiselect_dropdown', models.IntegerField()),
|
||||
('choices_dropdown', models.CharField(blank=True, choices=[('1', 'one'), ('2', 'two'), ('3', 'three'), ('4', 'four'), ('5', 'five'), ('6', 'six'), ('7', 'seven'), ('8', 'eight'), ('9', 'nine')], max_length=255)),
|
||||
('c_models', models.ManyToManyField(to='testapp.ModelC')),
|
||||
('multiselect_related', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='multiselect_related_reverse', to='testapp.ModelB')),
|
||||
('multiselect_related_dropdown', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='multiselect_related_dropdown_reverse', to='testapp.ModelB')),
|
||||
('related_dropdown', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_dropdown_reverse', to='testapp.ModelB')),
|
||||
|
|
|
|||
|
|
@ -1,9 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.db import models
|
||||
from django.db.models import Count, Case, When, Value
|
||||
|
||||
|
||||
class ModelAManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.annotate(annotation=Count('c_models'))
|
||||
qs = qs.annotate(boolean_annotation=Case(
|
||||
When(annotation__gt=12, then=Value(True)),
|
||||
default=Value(False),
|
||||
output_field=models.BooleanField()
|
||||
))
|
||||
return qs
|
||||
|
||||
|
||||
class ModelA(models.Model):
|
||||
objects = ModelAManager()
|
||||
CHOICES = (
|
||||
('1', 'one'),
|
||||
('2', 'two'),
|
||||
|
|
@ -23,6 +37,12 @@ class ModelA(models.Model):
|
|||
related_dropdown = models.ForeignKey('ModelB', on_delete=models.CASCADE, related_name='related_dropdown_reverse')
|
||||
multiselect_related = models.ForeignKey('ModelB', on_delete=models.CASCADE, related_name='multiselect_related_reverse')
|
||||
multiselect_related_dropdown = models.ForeignKey('ModelB', on_delete=models.CASCADE, related_name='multiselect_related_dropdown_reverse')
|
||||
c_models = models.ManyToManyField('ModelC')
|
||||
|
||||
|
||||
class ModelB(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
|
||||
class ModelC(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
|
|
|||
Loading…
Reference in New Issue