Вставка только в определенные поля в 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, например.

Вернуться на верх