Django - Prøver å passere en forekomst av en modell felt til et skjema felt

stemmer
0

Jeg skal gjøre mitt beste for ikke å høres ut som en ekte dummy, men ingen løfter. Jeg er en paramedic og jeg prøver å lage en app for å dokumentere enhet sjekker electronically.I har en modell felt som er fremmed tastet til noen andre modeller i mitt prosjekt. Dette feltet angir enheten brukeren bemanning for den dagen. Jeg vil at brukeren skal velge enheten han / hun er bemanning denne dagen, og har denne informasjonen automatisk fylle ut alle skjemaer fylles ut for den økten. Jeg har prøvd å lagre objektet med økter og jeg får denne objekt av typen 'MedicUnit' er ikke JSON serializable. Jeg har brukt model_to_dict metode og prøvde å passere strengen av enheten navn gjennom form_valid metoden, men jeg får denne Kan ikke tildele ' 'Medic 2'': ' ' instance' DailyCheck.medic_unit_number' må være en MedicUnit Jeg er relativt ny på programmering og Django og dette virker som et veldig enkelt problem å fikse, men mine Google søk ferdigheter er ikke å få meg noe sted. Her er min kode:

Model.py for opprinnelsen til UNIT_NAME modellfeltet

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 for en av de utenlandske viktige referanser til 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 for direkte over modellen

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']
Publisert på 13/02/2020 klokken 21:53
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Jeg tror du kan bruke MedicUnit.id. Dette bør være tilstrekkelig til å løse spørsmålet om initialisering feltet fra økten i andre former:

def check_home_view(request):
    if request.method == 'POST':
        form = ChooseMedicUnit(request.POST or None)
        if form.is_valid():
            request.session['unit_name'] = form.cleaned_data.get('medic_unit_number').id  # see here
            print(request.session['unit_name'])
            return redirect('daily')
    else:
        form = ChooseMedicUnit()
    return render(request, 'checks/checks_home.html', {'form':form})
Svarte 13/02/2020 kl. 22:17
kilden bruker

stemmer
0

Tusen takk for svaret Andrey. Jeg vil prøve det også. Jeg fant ut at alt jeg måtte gjøre var å importere MedicUnit modellen til mitt syn og endre min form_valid metode til følgende:

def form_valid(self, form):
        form.instance.daily_user = self.request.user
        form.instance.medic_unit_number = MedicUnit.ojbects.get(pk=self.request.session['unit_name']['id'])
        return super().form_valid(form)

Tilsynelatende økter ikke kan lagre gjenstander siden etter Django 1,5 tror jeg. Noen kan ha å faktisk sjekke meg på det. Så jeg refererte en forekomst av objektet med en ordbok verdi fra model_to_dict data som er lagret i sesjonen med MedicUnit.object.get samtalen.

Hvis du har det samme problemet, kan du skrive ut økten info til terminalen med en print uttalelse akkurat som i mitt check_home_view funksjon visning. Jeg brukte det info å se hva nøkkelen var nødvendig å ringe primærnøkkel nummer.

Jeg vil sjekke Andrey løsning senere i dag og se hvor godt som fungerer. Det virker litt renere enn min løsning.

Svarte 14/02/2020 kl. 13:35
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more