Reputation: 3
I am new bie in Django, I used MultiModelForm in my application and change selectbox field as textbox. When I try to save form, I am getting validation error (Select a valid choice. That choice is not one of the available choices.) because validation requires equipment_id instead of equipment_tagname. Please help me to find the way
Models.py
from django.db import models
from core.models import MyUser
from django.db.models import Max
from datetime import datetime
class System(models.Model):
system_tagname = models.CharField(max_length=20, blank=False, verbose_name="Etiket", unique=True)
system_content = models.CharField(max_length=50, blank=False, verbose_name="Açıklama", unique=True)
def __str__(self):
return "%s %s" % (self.system_tagname, self.system_content)
class SubSystem(models.Model):
system = models.ForeignKey(System, on_delete=models.CASCADE, verbose_name="Ana Sistem", related_name="systems")
subsystem_tagname = models.CharField(max_length=20, blank=False, verbose_name="Etiket", unique=True)
subsystem_content = models.CharField(max_length=50, blank=False, verbose_name="Açıklama", unique=True)
def __str__(self):
return "%s %s" % (self.subsystem_tagname, self.subsystem_content)
class Equipment(models.Model):
subsystem = models.ForeignKey(SubSystem, on_delete=models.CASCADE, verbose_name="Alt Sistem",
related_name="equipments")
equipment_tagname = models.CharField(max_length=20, blank=False, verbose_name="Etiket", unique=True)
equipment_content = models.CharField(max_length=50, blank=False, verbose_name="Açıklama", unique=True)
def __str__(self):
return "%s" % (self.equipment_tagname)
class WorkStatus(models.Model):
status_name = models.CharField(max_length=20)
class WorkRequest(models.Model):
work = models.CharField(max_length=200, blank=False, verbose_name="Açıklama")
equipment = models.ForeignKey(Equipment, on_delete=models.SET_NULL, null=True, verbose_name="Ekipman", blank=False,
related_name="equipment", )
reported_user = models.ForeignKey(MyUser, on_delete=models.SET_NULL, null=True, verbose_name="Raporlayan",
related_name="reported_users", blank=True)
created_date = models.DateTimeField(auto_now_add=True, verbose_name="Açılma Tarihi")
modified_date = models.DateTimeField(auto_now=True, verbose_name="Son Güncelleme")
closing_comment = models.CharField(max_length=300, verbose_name="Kapanış Yorumu", blank=True)
status=models.ForeignKey(WorkStatus,on_delete=models.SET_NULL,null=True, blank=True, verbose_name="İşin Durumu",related_name="status")
class WorkerGroup(models.Model):
name = models.CharField(max_length=20, unique=True, blank=False)
request = models.ForeignKey(WorkRequest, on_delete=models.SET_NULL, null=True, related_name="request")
class Worker(models.Model):
name = models.OneToOneField(MyUser, on_delete=models.CASCADE, primary_key=True)
group = models.ForeignKey(WorkerGroup, on_delete=models.SET_NULL, null=True)
class WorkComment(models.Model):
comment_content = models.CharField(max_length=150000, verbose_name="İş Yorumları", blank=True, null=True)
comment_author = models.ForeignKey(MyUser, on_delete=models.SET_NULL, null=True, related_name="authors", blank=True)
comment_work = models.ForeignKey(WorkRequest, on_delete=models.CASCADE, related_name="workorder", blank=True,null=True)
views.py
def addWorkOrder(request):
if request.user.status.name == "ADMIN":
form = AllRequestForm(request.POST or None)
if form.is_valid():
workrequest = form['workrequest'].save(commit=False)
workrequest.status = WorkStatus.objects.get(id=1)
equipment = form.cleaned_data.get("equipment")
workrequest.equipment =equipment
workrequest.save()
workcomment = form['workcomment'].save()
messages.success(request, "Ana Ekipman başarı ile oluşturuldu...")
return redirect('workorders:systemlist')
return render(request, "add_workorder.html", {'form': form})
else:
return render(request, 'unauthorized.html')
forms.py
from django import forms
from .models import System, SubSystem, Equipment, WorkComment,WorkRequest,WorkStatus
from betterforms.multiform import MultiModelForm
from django_summernote.widgets import SummernoteWidget, SummernoteInplaceWidget
class SystemForm(forms.ModelForm):
class Meta:
model = System
fields = ["system_tagname", "system_content"]
error_messages = {
'system_tagname': {
'unique': ("Girmiş olduğunuz sistem etiketi daha önce kullanılmıştır."),
},
'system_content"': {
'unique': ("Girmiş olduğunuz sistem açıklaması daha önce kullanılmıştır."),
}
}
class SubSystemForm(forms.ModelForm):
class Meta:
model = SubSystem
fields = ["system", "subsystem_tagname", "subsystem_content"]
error_messages = {
'subsystem_tagname': {
'unique': ("Girmiş olduğunuz alt sistem etiketi daha önce kullanılmıştır."),
},
'subsystem_content"': {
'unique': ("Girmiş olduğunuz alt sistem açıklaması daha önce kullanılmıştır."),
}
}
class SubForm(forms.ModelForm):
class Meta:
model = SubSystem
fields = ["system"]
class EquipmentForm(forms.ModelForm):
class Meta:
model = Equipment
fields = ["subsystem", "equipment_tagname", "equipment_content"]
error_messages = {
'equipment_tagname': {
'unique': ("Girmiş olduğunuz ekipman etiketi daha önce kullanılmıştır."),
},
'subsystem_content"': {
'unique': ("Girmiş olduğunuz ekipman açıklaması daha önce kullanılmıştır."),
}
}
class AllSystemForm(MultiModelForm):
form_classes = {
'subsystem': SubForm,
'equipment': EquipmentForm,
}
class WorkRequestForm(forms.ModelForm):
class Meta:
model = WorkRequest
fields = '__all__'
widgets={
'equipment': forms.TextInput
}
class WorkStatusForm(forms.ModelForm):
class Meta:
model = WorkStatus
fields = []
class WorkCommentForm (forms.ModelForm):
class Meta:
model = WorkComment
fields = ["comment_content"]
widgets = {
'comment_content': SummernoteWidget()
}
class AllRequestForm(MultiModelForm):
form_classes = {
'workrequest': WorkRequestForm,
'workcomment': WorkCommentForm,
}
def clean_equipment(self):
equip = self.cleaned_data.get("equipment")
equipment = Equipment.objects.get(equipment_tagname=equip)
return equipment
Upvotes: 0
Views: 150