Значение по умолчанию в 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)