Ho intenzione di fare del mio meglio per non suono come un vero e proprio manichino, ma niente promesse. Io sono un paramedico e sto cercando di fare un app per i controlli delle unità documento electronically.I avere un campo modello che è estraneo a chiave ad alcuni altri modelli nel mio progetto. Questo campo indica l'unità l'utente è di personale per quel giorno. Voglio all'utente di scegliere l'unità di lui / lei è di personale quel giorno e che hanno informazioni di auto-compilare eventuali moduli compilati per quella sessione. Ho provato memorizzare l'oggetto utilizzando le sessioni e ottengo questo oggetto di tipo 'MedicUnit' non è JSON serializzabile. Ho usato il metodo model_to_dict e ho cercato di passare la stringa del nome dell'unità attraverso il metodo form_valid ma ottengo questo Impossibile assegnare ' 'Medic 2'': ' ' istanza' DailyCheck.medic_unit_number' deve essere un MedicUnit Sono relativamente nuovo per la programmazione e Django e questo mi sembra un problema molto facile da risolvere, ma le mie capacità Google che cerca non mi sono sempre ovunque. Ecco il mio codice:
Model.py per l'origine del campo Modello unit_name
class MedicUnit(models.Model):
unit_name = models.CharField(max_length=50, default='')
is_active = models.BooleanField(default=True)
def __str__(self):
return self.unit_name
Model.py per uno dei riferimenti chiave esterna alla unit_name
class DailyCheck(models.Model):
daily_user = models.ForeignKey(User, on_delete=models.PROTECT)
record_date = models.DateTimeField(auto_now=True)
medic_unit_number = models.ForeignKey('components.MedicUnit', related_name='medic_unit_number', on_delete=models.PROTECT, default='')
unit_property_number = models.ForeignKey('components.Vehicle', related_name='unit_property_number', on_delete=models.PROTECT, default='')
mileage = models.IntegerField(default=0)
narc_seal_number = models.IntegerField(default=0)
emergency_lights = models.BooleanField()
driving_lights = models.BooleanField()
red_bag = models.BooleanField()
LP_15 = models.BooleanField()
BLS_bag = models.BooleanField()
RTF_bag = models.BooleanField()
suction = models.BooleanField()
oxygen = models.BooleanField()
free_text = models.TextField(default='')
views.py per il modello direttamente sopra
def check_home_view(request):
if request.method == 'POST':
form = ChooseMedicUnit(request.POST or None)
if form.is_valid():
unit_name = form.cleaned_data.get('medic_unit_number')
request.session['unit_name'] = model_to_dict(unit_name)
print(request.session['unit_name'])
return redirect('daily')
else:
form = ChooseMedicUnit()
return render(request, 'checks/checks_home.html', {'form':form})
class checkAdd(CreateView):
model = DailyCheck
fields = ['unit_property_number', 'mileage', 'narc_seal_number', 'emergency_lights', 'driving_lights', 'red_bag', 'LP_15', 'BLS_bag', 'RTF_bag', 'suction', 'oxygen', 'free_text']
success_url = '/checks'
def form_valid(self, form):
form.instance.daily_user = self.request.user
form.instance.medic_unit_number = self.request.session['unit_name']['unit_name']
return super().form_valid(form)
forms.py
class ChooseMedicUnit(forms.ModelForm):
class Meta:
model = DailyCheck
fields = ['medic_unit_number']