payments card and separated /support url

This commit is contained in:
2025-05-22 16:08:40 +03:00
parent 6963fdb17a
commit 29d3af2ea1
16 changed files with 481 additions and 31 deletions

View File

@@ -1,5 +1,21 @@
from django.contrib import admin
from .models import *
class FeatureInline(admin.TabularInline):
model = MembershipFeatures
list_display = ['features'] # поля в списке
list_filter = ['features'] # фильтры справа
search_fields = ['features'] # поля для поиска
extra = 0
can_delete = False
verbose_name = 'Параметр тарифных планов'
verbose_name_plural = 'Параметры тарифных планов'
class PricingAdmin(admin.ModelAdmin):
inlines = [FeatureInline]
admin.site.register(FAQ)
admin.site.register(News)
admin.site.register(Pricing, PricingAdmin)

View File

@@ -0,0 +1,35 @@
# Generated by Django 5.2.1 on 2025-05-22 12:00
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sitemanagement', '0009_alter_news_slug_alter_news_titleimage'),
]
operations = [
migrations.CreateModel(
name='Pricing',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('plan', models.CharField(choices=[('lite', 'Lite'), ('standart', 'Standart'), ('premium', 'Premium')], max_length=10)),
('price', models.IntegerField()),
('is_popular', models.BooleanField(default=False)),
],
options={
'verbose_name': 'Тарифный план',
'verbose_name_plural': 'Тарифные планы',
},
),
migrations.CreateModel(
name='MembershipFeatures',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('feature', models.CharField(max_length=255)),
('plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sitemanagement.pricing', verbose_name='Тарифный план')),
],
),
]

View File

@@ -0,0 +1,32 @@
# Generated by Django 5.2.1 on 2025-05-22 12:42
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sitemanagement', '0010_pricing_membershipfeatures'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Transactions',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('amount', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Сумма')),
('status', models.CharField(max_length=255, verbose_name='Статус')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
('plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sitemanagement.pricing', verbose_name='Тарифный план')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь')),
],
options={
'verbose_name': 'Транзакция',
'verbose_name_plural': 'Транзакции',
'ordering': ['id'],
},
),
]

View File

@@ -5,6 +5,8 @@ from django.utils.text import slugify
from django.db.models.signals import pre_save
from django.dispatch import receiver
from transliterate import translit
from routes.constants.account_types import account_types
from django.contrib.auth.models import User
class FAQ (models.Model):
title = models.CharField(max_length=250)
@@ -54,4 +56,37 @@ def generate_slug(sender, instance, **kwargs):
# транслит с русского на латиницу
transliterated_title = translit(instance.title, 'ru', reversed=True)
# создаем слаг и заменяем пробелы на дефисы
instance.slug = slugify(transliterated_title)
instance.slug = slugify(transliterated_title)
class Pricing(models.Model):
plan = models.CharField(max_length=10, choices=account_types)
price = models.IntegerField()
is_popular = models.BooleanField(default=False)
class Meta:
verbose_name = 'Тарифный план'
verbose_name_plural = 'Тарифные планы'
def __str__(self):
return self.plan
class MembershipFeatures(models.Model):
plan = models.ForeignKey(Pricing, on_delete=models.CASCADE, verbose_name=('Тарифный план'))
feature = models.CharField(max_length=255)
class Transactions(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь')
amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Сумма')
plan = models.ForeignKey(Pricing, on_delete=models.CASCADE, verbose_name='Тарифный план')
status = models.CharField(max_length=255, verbose_name='Статус')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
class Meta:
verbose_name = 'Транзакция'
verbose_name_plural = 'Транзакции'
ordering = ['id']
def __str__(self):
return f'{self.user} - {self.amount}'