updated testapp

django-5.0
Thomas Leichtfuß 2020-09-05 10:36:29 +02:00
parent be72e7c5c9
commit fcbf7c40dc
4 changed files with 45 additions and 4 deletions

View File

@ -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

View File

@ -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):

View File

@ -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')),

View File

@ -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)