Вставка только в определенные поля в formModel в django
У меня есть модель django и соответствующая ей форма для вставки и чтения значений из таблицы с тремя столбцами в базе данных. Мое требование заключается в том, что мне нужно вставить значение только в два столбца с помощью формы, оставив третий столбец, который является полем даты. Но у меня есть требование прочитать все три столбца, чтобы впоследствии отобразить их в html. Когда я использую исключение в форме, это работает хорошо для html-части, но при попытке сохранить форму с помощью form.save(), она пытается вставить null в третий столбец и выдает ошибку. Может ли кто-нибудь помочь мне полностью опустить третий столбец при сохранении формы.
Class sales(models.Model)
product_name = models.CharField(max_length=500)
quantity=models.FloatField()
sale_date=models.DateField()
Я думаю, что sale_date должен иметь атрибут auto_add=True
в модели. Таким образом, Django автоматически устанавливает значение даты на текущую дату.
from django import forms from .models import sales
class YourForm(forms.ModelForm): class Meta: model = sales fields = ['product_name', 'quantity'] # Specify only the required fields
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
# Пропустите сохранение столбца sale_date
# Вы можете установить другие значения, если это необходимо
# Например: instance.sale_date = some_value
if commit:
instance.save()
return instance
Вы можете не переопределять метод save вообще, а управлять тем, как и что сохранять, в логике представления. Например:
from django.utils import timezone
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
new_object = form.save(commit=False)
if commit: # or some logical check, if needed
new_object.sale_date = timezone.now().date()
new_object.save()
Вы также можете явно указать поля в методе сохранения:
.save(update_fields=['your_field_name', 'your_other_field_name'])
... что приведет к тому, что django будет записывать только в те поля, которые вы объявили. Трудно понять, чего вы пытаетесь добиться с помощью поля sale_date
, но, возможно, вы захотите сделать его нулевым и пустым, например, так:
sale_date = models.DateField(null=True, blank=True)
... после чего вы могли бы обновлять его только в случае null, например.