Получение значения по умолчанию из списка django

У меня есть сайт со списком статусов, как мне получить только шаги 1 из списка, который я создал, когда моя форма отправлена, и сохранить в базе данных?

models.py

class Photo(models.Model):
    STEP1 = "step 1"
    STEP2 = "step 2"
    STEP3 = "step 3"
    STEP4 = "step 4"

    STATUS = (
        (STEP1, 'Received'),
        (STEP2, 'Cleaning'),
        (STEP3, 'Leak '),
        (STEP4, 'Loss Pressure Test'),

    )

    Datetime = models.DateTimeField(auto_now_add=True)


    serialno = models.TextField()  # serialno stand for serial number
    partno = models.TextField()  # partno stand for part number
    reception = models.TextField()
    Customername = models.TextField()

    def __str__(self):
        return self.reception

forms.py

class AddForm(forms.Form):
    reception = forms.CharField(label='',
                                widget=forms.TextInput(
                                    attrs={"class": 'form-control', 'placeholder': 'Enter reception number'}))
    partno = forms.CharField(label='',
                             widget=forms.TextInput(
                                 attrs={"class": 'form-control', 'placeholder': 'Enter part number'}))
    serialno = forms.CharField(label='',
                               widget=forms.TextInput(
                                   attrs={"class": 'form-control', 'placeholder': 'Enter Serial Number'}))
    Customername = forms.CharField(label='',
                                   widget=forms.TextInput(
                                       attrs={"class": 'form-control', 'placeholder': 'Enter customer name'}))

    class meta:
        model = Photo
        fields = ('reception', 'partno', 'serialno', 'Customername')

views.py

def addPhoto(request):
    msg = None
    if request.method == 'POST':
        form = AddForm(request.POST)
        if form.is_valid():
            Datetime = datetime.now()
            reception = form.cleaned_data['reception']
            partno = form.cleaned_data['partno']
            serialno = form.cleaned_data['serialno']
            Customername = form.cleaned_data['Customername']
            # create a new MCO object with the form data
            form = Photo(Datetime=Datetime, reception=reception, partno=partno, serialno=serialno, Customername=Customername)
            form.save()
            context = {'form': form}
            return redirect('/gallery', context)
        else:
            msg = 'form is not valid'
    else:
        form = AddForm()

    return render(request, 'photos/add.html', {'form':  form,})

Это страница, на которой пользователь вводит данные: enter image description here

это страница, на которой отображаются детали (Под выполненным действием он должен отображать шаг 1, который получается всякий раз, когда пользователь отправляет форму, как мне это сделать? enter image description here

Для этого вы можете создать поле под названием status в вашей базе данных, чтобы по умолчанию значение было default = STEP1, примерно так:

 class Photo(models.Model):
        STEP1 = "Received"
        STEP2 = "Cleaning"
        STEP3 = "Leak"
        STEP4 = "Loss Pressure Test"
    
        STATUS = (
            (STEP1, 'Received'),
            (STEP2, 'Cleaning'),
            (STEP3, 'Leak '),
            (STEP4, 'Loss Pressure Test'),
    
        )
    
        Datetime = models.DateTimeField(auto_now_add=True)
        #i add the status here so by default it is just "Received"
        status  = models.CharField(max_length=20,choices=STATUS,
            default=STEP1)
    
        serialno = models.TextField()  # serialno stand for serial number
        partno = models.TextField()  # partno stand for part number
        reception = models.TextField()
        Customername = models.TextField()
    
        def __str__(self):
            return self.reception

После этого
1) запустите makemigrations и выполните миграцию
. Теперь внутри ваших шаблонов вы можете просто вызвать "your_instance.status" .

Ответ на другой ваш вопрос:
как сделать так, чтобы при редактировании пользователем таблицы, выполненное действие показывало step2?

давайте сделаем что-то вроде этого.
forms.py:

from .models import Photo


class PhotoForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ['serialno','partno','reception','Customername']

views.py

from .forms import PhotoForm
from .models import Photo
from django.shortcuts import render,get_object_or_404,redirect
def editphoto(request,photo_id):
    photo = get_object_or_404(Photo,pk=photo_id)
    if request.method == 'POST':
        form = PhotoForm(request.POST or None)
        if form.is_valid():
            form.save()
            #we can do something like this to check that serial number has changed 
            if form.serialno != photo.serialno:
                form.serialno = 'Cleaning'
                form.save()
            return redirect('***somewhere***')
    else:
        form = PhotoForm(instance=photo)
    return render(request,'your-template',{'form':form})

Но обратите внимание, что здесь есть проблемы с безопасностью, я не проверил, что пользователь является автором этого сообщения, так что теперь любой пользователь может редактировать сообщение, это так плохо. py вы можете проверить это, просто сделайте что-то вроде:photo = get_object_or_404(Photo,pk=photo_id,author_id=request.user.pk)теперь, когда пользователь не является автором поста, он поднимет Not Found Page, вот и все.
Happy Coding.

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