راکت

thound sepratorدر جنگو و فیلدهای ورودی

2 پاسخ

سلام
من یه پروژه جنگو دارم که میخوام وقتی کاربر مثلا قیمت رو وارد فیلد اینپوت فرم میکنه اعداد سه تا سه تا جدا شن
یه راهش اینه که با html و جاوا اسکریپت این کار رو انجام بدم ولی چون در اون مورد فک کنم الزامیه که تایپ فیلد تکست باشه برای نمایش هم باید کلی زحمت بکشم و کد بزنم چون intcomma خود جنگو برای تایپ تیکت (charfield ) کار نمیکنه
شما راه حل درست تر و اصولی تری به زهنتون میرسه ؟
فقط دقت کنید که من برای فرم میخوام یپریت بشه ها برای نمایش مشکلی ندارم چون اگه تایپش اینتیجر باشه خود جنگو با thousand seprator جدا میکنه
تشکر

ثبت پرسش جدید

پاسخ‌ها

2
مهدی مشایخی
مهدی مشایخی
@MahdiMashayekhi

تخصص: برنامه نویس پایتون - ماشین لرنینگ - جنگو

سلام روز بخیر
برای اینکار باید یک فیلد شخصی سازی شده درست کند و از IntegerField ارث بری بکنه
کد زیر رو بررسی کنید:

from django import forms

class CustomIntegerField(forms.IntegerField):
    widget = forms.TextInput(attrs={'type': 'tel'})

    def __init__(self, *args, **kwargs):
        kwargs['localize'] = True
        super().__init__(*args, **kwargs)

و اینجوری میتونید از این فیلد استفاده کنید:

class MyForm(forms.Form):
    price = CustomIntegerField()

و برای جدا کردن سه تایی باید از یک ویجت شخصی استفاده کنید:

class CustomIntegerFieldWidget(forms.TextInput):
    def format_value(self, value):
        if value is not None:
            return f'{value:,}'
        return super().format_value(value)

    class Media:
        js = ('js/custom_integer_field_widget.js',)

class CustomIntegerField(forms.IntegerField):
    widget = CustomIntegerFieldWidget(attrs={'type': 'tel'})

    def __init__(self, *args, **kwargs):
        kwargs['localize'] = True
        super().__init__(*args, **kwargs)
حسام
حسام
@rebel

تخصص: میکروکنترلرها و الکترونیک دیجیتال

من جاوا اسکریپت کار نکردم میشه محتویات فایل js رو هم به اشتراک بذارین؟
زحمتتون میشه ببخشید ممنون از پاسختون

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام