parent
8c97b56ac2
commit
e6b514e71c
18 changed files with 155 additions and 84 deletions
@ -1,40 +1,25 @@ |
||||
from constance import config |
||||
from constance.admin import get_values, ConstanceForm |
||||
from rest_framework import serializers |
||||
from rest_framework.fields import SkipField |
||||
from collections import OrderedDict |
||||
|
||||
from apps.config.models import Config |
||||
|
||||
def _set_constance_value(key, value): |
||||
form = ConstanceForm(initial=get_values()) |
||||
field = form.fields[key] |
||||
clean_value = field.clean(field.to_python(value)) |
||||
setattr(config, key, clean_value) |
||||
|
||||
|
||||
class ConfigSerializer(serializers.Serializer): |
||||
class ConfigSerializer(serializers.ModelSerializer): |
||||
SERVICE_COMMISSION = serializers.IntegerField(required=False) |
||||
SERVICE_DISCOUNT_MIN_AMOUNT = serializers.IntegerField(required=False) |
||||
SERVICE_DISCOUNT = serializers.IntegerField(required=False) |
||||
INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False) |
||||
INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False) |
||||
INSTAGRAM_PROFILE_URL = serializers.CharField(required=False) |
||||
# SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False) |
||||
|
||||
def to_representation(self, instance): |
||||
ret = OrderedDict() |
||||
fields = self._readable_fields |
||||
for field in fields: |
||||
attribute = instance.get(field.field_name) |
||||
ret[field.field_name] = field.to_representation(attribute) |
||||
return ret |
||||
|
||||
def to_internal_value(self, data): |
||||
ret = OrderedDict(get_values()) |
||||
for k, v in data.items(): |
||||
ret[k] = v |
||||
return ret |
||||
SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False) |
||||
|
||||
def update(self, instance, validated_data): |
||||
for k, v in validated_data.items(): |
||||
_set_constance_value(k, v) |
||||
class Meta: |
||||
model = Config |
||||
fields = ( |
||||
'SERVICE_COMMISSION', |
||||
'SERVICE_DISCOUNT_MIN_AMOUNT', |
||||
'SERVICE_DISCOUNT', |
||||
'INSTAGRAM_CLIENT_ACCESS_TOKEN', |
||||
'INSTAGRAM_CLIENT_SECRET', |
||||
'INSTAGRAM_PROFILE_URL', |
||||
'SCHOOL_LOGO_IMAGE', |
||||
) |
||||
|
||||
@ -0,0 +1,3 @@ |
||||
from django.contrib import admin |
||||
|
||||
# Register your models here. |
||||
@ -0,0 +1,5 @@ |
||||
from django.apps import AppConfig |
||||
|
||||
|
||||
class ConfigConfig(AppConfig): |
||||
name = 'config' |
||||
@ -0,0 +1,27 @@ |
||||
# Generated by Django 2.0.3 on 2018-03-26 10:25 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Config', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('INSTAGRAM_CLIENT_ACCESS_TOKEN', models.CharField(default='7145314808.f6fa114.6b737a5355534e0eb5cf7c40cb4998f6', max_length=51)), |
||||
('INSTAGRAM_CLIENT_SECRET', models.CharField(default='2334a921425140ccb180d145dcd35b25', max_length=32)), |
||||
('INSTAGRAM_PROFILE_URL', models.CharField(default='#', max_length=126)), |
||||
('SERVICE_COMMISSION', models.IntegerField(default=10)), |
||||
('SERVICE_DISCOUNT_MIN_AMOUNT', models.IntegerField(default=3500)), |
||||
('SERVICE_DISCOUNT', models.ImageField(default=1000, upload_to='')), |
||||
('SCHOOL_LOGO_IMAGE', models.ImageField(null=True, upload_to='')), |
||||
], |
||||
), |
||||
] |
||||
@ -0,0 +1,18 @@ |
||||
# Generated by Django 2.0.3 on 2018-03-26 10:26 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('config', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='config', |
||||
name='SCHOOL_LOGO_IMAGE', |
||||
field=models.FileField(null=True, upload_to=''), |
||||
), |
||||
] |
||||
@ -0,0 +1,23 @@ |
||||
# Generated by Django 2.0.3 on 2018-03-26 10:27 |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('config', '0002_auto_20180326_1026'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='config', |
||||
name='SCHOOL_LOGO_IMAGE', |
||||
field=models.ImageField(null=True, upload_to=''), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='config', |
||||
name='SERVICE_DISCOUNT', |
||||
field=models.IntegerField(default=1000), |
||||
), |
||||
] |
||||
@ -0,0 +1,25 @@ |
||||
from django.db import models |
||||
|
||||
|
||||
class Config(models.Model): |
||||
INSTAGRAM_CLIENT_ACCESS_TOKEN = models.CharField( |
||||
max_length=51, default='7145314808.f6fa114.6b737a5355534e0eb5cf7c40cb4998f6' |
||||
) |
||||
INSTAGRAM_CLIENT_SECRET = models.CharField(max_length=32, default='2334a921425140ccb180d145dcd35b25') |
||||
INSTAGRAM_PROFILE_URL = models.CharField(max_length=126, default='#') |
||||
SERVICE_COMMISSION = models.IntegerField(default=10) |
||||
SERVICE_DISCOUNT_MIN_AMOUNT = models.IntegerField(default=3500) |
||||
SERVICE_DISCOUNT = models.IntegerField(default=1000) |
||||
SCHOOL_LOGO_IMAGE = models.ImageField(null=True) |
||||
|
||||
def save(self, *args, **kwargs): |
||||
self.pk = 1 |
||||
super().save(*args, **kwargs) |
||||
|
||||
def delete(self, *args, **kwargs): |
||||
pass |
||||
|
||||
@classmethod |
||||
def load(cls): |
||||
obj, created = cls.objects.get_or_create(pk=1) |
||||
return obj |
||||
@ -0,0 +1,3 @@ |
||||
from django.test import TestCase |
||||
|
||||
# Create your tests here. |
||||
@ -0,0 +1,3 @@ |
||||
from django.shortcuts import render |
||||
|
||||
# Create your views here. |
||||
@ -0,0 +1,5 @@ |
||||
from apps.config.models import Config |
||||
|
||||
|
||||
def config(request): |
||||
return {"config": Config.load()} |
||||
@ -0,0 +1,14 @@ |
||||
from django.forms import ImageField as BaseImageField |
||||
|
||||
|
||||
class ImageField(BaseImageField): |
||||
|
||||
def to_internal_value(self, data): |
||||
# if data is None image field was not uploaded |
||||
if data: |
||||
file_object = super(ImageField, self).to_internal_value(data) |
||||
django_field = self._DjangoImageField() |
||||
django_field.error_messages = self.error_messages |
||||
django_field.to_python(file_object) |
||||
return file_object |
||||
return data |
||||
Loading…
Reference in new issue