Значение по умолчанию в Django Model

У меня есть модель "Product" и у нее есть такие атрибуты, как цена, количество и примечания. Через models.py, если у remarks есть свойство "null=True", оно вернет значение "None", но я хочу, чтобы это было тире(-). Если в колонку remarks в модели добавить "default='-'", то после создания и загрузки формы на ней будет стоять тире('-'), но я хочу, чтобы на форме при загрузке ничего не было. У вас есть идеи, возможно ли это?

Возможно, вам стоит попробовать чистый метод на форме.

def clean_<property>(self):
    property = self.cleaned_data['property']
    if not property:
        return "-"

Я не тестировал код, но он должен работать

https://docs.djangoproject.com/en/4.0/ref/forms/validation/#cleaning-a-specific-field-attribute

Думаю, вы можете установить пользовательское начальное значение формы

class ProductForm(forms.ModelForm):
    ... fields here ...
    
    def __init__(self, *args, **kwargs):
        ... other code ...
        initial = kwargs.pop('initial', {})
        remark_value = initial.get('remarks')
        initial.update("remarks", "" if remark_value  == "-" else remark_value)
        kwargs['initial'] = initial
        super(ProductForm, self).__init__(*args, **kwargs)

У вас есть больше вариантов, но вот два, которые вы можете сделать:

Если вы хотите установить default="-", вы должны переопределить метод формы __int__(). таким образом, форма будет выглядеть как

class MyForm(forms.ModelForm):
     def __init__(self, *args, **kwargs):
         
         #creating
         self.fields['your_field'].initial = " "
         
         # updating
         if self.instance.pk:
            self.fields['your_field'].initial = self.instance.your_field

Если вы не хотите устанавливать default, вы должны переопределить метод модели save()

class MyModel(models.Model):
    def save(self, *args, **kwargs):
        if not self.your_field:
           self.your_field = "-"
     return super(MyModel, self).save(*args, **kwargs)
Вернуться на верх