Получение значения по умолчанию из списка 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,})
Это страница, на которой пользователь вводит данные:
это страница, на которой отображаются детали (Под выполненным действием он должен отображать шаг 1, который получается всякий раз, когда пользователь отправляет форму, как мне это сделать?
Для этого вы можете создать поле под названием 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.