admin conf and import export
product full url
This commit is contained in:
@@ -2,8 +2,31 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
|
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
@admin.register(User)
|
@admin.register(User)
|
||||||
class UserAdmin(ModelAdmin):
|
class UserAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
|
|
||||||
list_display = ['phone', 'email', 'is_superuser']
|
list_display = ['phone', 'email', 'is_superuser']
|
||||||
readonly_fields = ['password', 'last_login', 'otp_expiry', 'otp_hash']
|
readonly_fields = ['phone']
|
||||||
|
|
||||||
|
exclude = ('otp_hash', 'otp_expiry', 'is_active', 'is_staff', 'password', 'last_login')
|
||||||
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+20
-2
@@ -2,7 +2,25 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
|
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ProductChatModel)
|
@admin.register(ProductChatModel)
|
||||||
class ProductChatAdmin(ModelAdmin):
|
class ProductChatAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ INSTALLED_APPS = [
|
|||||||
'rest_framework_simplejwt',
|
'rest_framework_simplejwt',
|
||||||
'rest_framework_simplejwt.token_blacklist',
|
'rest_framework_simplejwt.token_blacklist',
|
||||||
'rest_framework.authtoken',
|
'rest_framework.authtoken',
|
||||||
|
'import_export',
|
||||||
# custom apps
|
# custom apps
|
||||||
'product',
|
'product',
|
||||||
'account',
|
'account',
|
||||||
|
|||||||
+37
-4
@@ -2,11 +2,44 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
|
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
|
|
||||||
@admin.register(SliderModel)
|
@admin.register(SliderModel)
|
||||||
class SliderAdmin(ModelAdmin):
|
class SliderAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = False
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@admin.register(HomeImageModel)
|
@admin.register(HomeImageModel)
|
||||||
class HomeImageAdmin(ModelAdmin):
|
class HomeImageAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
+38
-1
@@ -1,3 +1,40 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from .models import *
|
||||||
|
from unfold.admin import ModelAdmin, TabularInline
|
||||||
|
|
||||||
# Register your models here.
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
|
|
||||||
|
class OrderItemModelInline(TabularInline):
|
||||||
|
model = OrderItemModel
|
||||||
|
extra = 0
|
||||||
|
max_num = 0
|
||||||
|
def has_delete_permission(self, request, obj=None):
|
||||||
|
return False
|
||||||
|
def get_readonly_fields(self, request, obj=None):
|
||||||
|
return [field.name for field in self.model._meta.fields]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(OrderModel)
|
||||||
|
class OrderAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inlines = [OrderItemModelInline]
|
||||||
@@ -2,23 +2,100 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
|
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ProductModel)
|
@admin.register(ProductModel)
|
||||||
class ProductModelAdmin(ModelAdmin):
|
class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@admin.register(MainCategoryModel)
|
@admin.register(MainCategoryModel)
|
||||||
class MainCategoryModelAdmin(ModelAdmin):
|
class MainCategoryModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@admin.register(SubCategoryModel)
|
@admin.register(SubCategoryModel)
|
||||||
class SubCategoryModelAdmin(ModelAdmin):
|
class SubCategoryModelAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@admin.register(CommentModel)
|
@admin.register(CommentModel)
|
||||||
class CommentAdmin(ModelAdmin):
|
class CommentAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
pass
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@admin.register(DollorModel)
|
@admin.register(DollorModel)
|
||||||
class DollorAdmin(ModelAdmin):
|
class DollorAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
exclude = ('unique_filed', )
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
readonly_fields = ('price',)
|
readonly_fields = ('price',)
|
||||||
@@ -24,12 +24,21 @@ class MainCategoryModel(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class SubCategoryModel(MainCategoryModel):
|
class SubCategoryModel(MainCategoryModel):
|
||||||
|
# name = models.CharField(max_length=50, verbose_name='نام')
|
||||||
|
# slug = models.SlugField(max_length=50, unique=True, help_text="اسم دسته را برای مسیر به انگلیسی و بدون فاصله وارد کنید")
|
||||||
|
# icon = models.ImageField(upload_to='category_model/',verbose_name='آیکون', blank=True, null=True)
|
||||||
|
# meta_title = models.CharField(max_length=60, verbose_name="عنوان متا", help_text="عنوان متا برای SEO", blank=True, null=True)
|
||||||
|
# meta_description = models.TextField(max_length=160, verbose_name="توضیحات متا", help_text="توضیحات متا برای SEO", blank=True, null=True)
|
||||||
parent = models.ForeignKey(MainCategoryModel, on_delete=models.CASCADE, related_name='subcategorys', null=True, blank=True, verbose_name='دستهبندی والد')
|
parent = models.ForeignKey(MainCategoryModel, on_delete=models.CASCADE, related_name='subcategorys', null=True, blank=True, verbose_name='دستهبندی والد')
|
||||||
show = models.BooleanField(default=False, verbose_name='نمایش در خانه')
|
show = models.BooleanField(default=False, verbose_name='نمایش در خانه')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "زیر دستهبندی"
|
verbose_name = "زیر دستهبندی"
|
||||||
verbose_name_plural = "زیر دستهبندیها"
|
verbose_name_plural = "زیر دستهبندیها"
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
class DollorModel(models.Model):
|
class DollorModel(models.Model):
|
||||||
price = models.FloatField(null=True, blank=True, verbose_name='قیمت دلار')
|
price = models.FloatField(null=True, blank=True, verbose_name='قیمت دلار')
|
||||||
defualt_price = models.FloatField(null=True, blank=True, default=80000.0, verbose_name='قیمت دستی')
|
defualt_price = models.FloatField(null=True, blank=True, default=80000.0, verbose_name='قیمت دستی')
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class ProductView(APIView):
|
|||||||
product = get_object_or_404(ProductModel, id=pk)
|
product = get_object_or_404(ProductModel, id=pk)
|
||||||
dollor_object, _ = DollorModel.objects.get_or_create(unique_filed='unique')
|
dollor_object, _ = DollorModel.objects.get_or_create(unique_filed='unique')
|
||||||
dollor_price = dollor_object.price
|
dollor_price = dollor_object.price
|
||||||
product_ser = self.serializer_class(instance=product, many=False, context={'dollor_price': dollor_price})
|
product_ser = self.serializer_class(instance=product, many=False, context={'dollor_price': dollor_price, 'request': request})
|
||||||
return Response(product_ser.data, status=status.HTTP_200_OK)
|
return Response(product_ser.data, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+47
-1
@@ -1,3 +1,49 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from .models import *
|
||||||
|
from unfold.admin import ModelAdmin, TabularInline
|
||||||
|
|
||||||
# Register your models here.
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
|
||||||
|
from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
|
|
||||||
|
class MessageInline(TabularInline):
|
||||||
|
model = Message
|
||||||
|
extra = 1
|
||||||
|
|
||||||
|
@admin.register(Ticket)
|
||||||
|
class TicketAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inlines = [MessageInline]
|
||||||
|
|
||||||
|
@admin.register(Message)
|
||||||
|
class MessageAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||||
|
import_form_class = ImportForm
|
||||||
|
export_form_class = ExportForm
|
||||||
|
|
||||||
|
|
||||||
|
compressed_fields = True
|
||||||
|
warn_unsaved_form = True
|
||||||
|
|
||||||
|
formfield_overrides = {
|
||||||
|
models.TextField: {
|
||||||
|
"widget": WysiwygWidget,
|
||||||
|
},
|
||||||
|
ArrayField: {
|
||||||
|
"widget": ArrayWidget,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.1.2 on 2025-01-28 16:50
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('ticket', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='ticket',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('open', 'یاز'), ('in_progress', 'در حال پردازش'), ('resolved', 'حل شده'), ('closed', 'باز')], default='open', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -3,10 +3,10 @@ from account.models import User
|
|||||||
|
|
||||||
class Ticket(models.Model):
|
class Ticket(models.Model):
|
||||||
STATUS_CHOICES = [
|
STATUS_CHOICES = [
|
||||||
('open', 'Open'),
|
('open', 'یاز'),
|
||||||
('in_progress', 'In Progress'),
|
('in_progress', 'در حال پردازش'),
|
||||||
('resolved', 'Resolved'),
|
('resolved', 'حل شده'),
|
||||||
('closed', 'Closed'),
|
('closed', 'باز'),
|
||||||
]
|
]
|
||||||
|
|
||||||
subject = models.CharField(max_length=255)
|
subject = models.CharField(max_length=255)
|
||||||
|
|||||||
Reference in New Issue
Block a user