Django - próbál átadni egy példányát modell mezőt, hogy egy űrlap mezőt

szavazat
0

Megyek megteszek, hogy ne úgy hangzik, mint egy igazi dummy, de nem ígér. Én egy mentős és próbálok, hogy egy alkalmazás számára, hogy a dokumentum készülék ellenőrzi electronically.I egy modell olyan területen, amely a külföldi ékelt néhány más modellek az én projekt. Ez a mező jelöli a készülék a felhasználó a személyzetre az adott napra. Azt akarom, hogy a felhasználó választhat a készüléket / ő személyzeti aznap, és az ezzel kapcsolatos információk automatikus kitöltése minden részére kitöltött adott ülés. Megpróbáltam tároló objektumot ülések és kaptam ezt az „Object»típusú MedicUnit«nem JSON serializable”. Már használt a model_to_dict módszer, és megpróbálta átadni a húr az egység neve a form_valid módszer, de kapok ez a „Can not assign»»Medic 2««:»DailyCheck.medic_unit_number«kell lennie»MedicUnit«példány”. Én viszonylag új a programozás és a Django és ez úgy tűnik, mint egy nagyon egyszerű problémát kijavítani, de a google keresés képességek nem tudnak sehová. Itt van a kód:

Model.py az eredete UNIT_NAME modell mezőt

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 az egyik idegen kulcs hivatkozás a 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 a közvetlenül felette modell

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']
A kérdést 13/02/2020 23:53
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Azt hiszem, akkor használja MedicUnit.id. Ez elegendőnek kell lennie ahhoz, hogy megoldja a problémát inicializálása területén a munkamenet más formában:

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})
Válaszolt 14/02/2020 00:17
a forrás felhasználó

szavazat
0

Köszönöm szépen a választ Andrey. Megpróbálom, hogy túl. Azt találták, hogy minden, amit kellett tennem, hogy importálni a MedicUnit modell véleményem szerint, és megváltoztatni a form_valid eljárás a következő:

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)

Úgy tűnik ülés nem tárgyak tárolására, mivel miután a Django 1.5 azt hiszem. Lehet, hogy valaki, hogy a tény, ellenőrizze, hogy nekem. Szóval hivatkozott egy példánya az objektum a szótár értéket a model_to_dict tárolt adatok a munkamenetet a MedicUnit.object.get hívást.

Ha ugyanaz a probléma, akkor nyomtassa ki a munkamenet információ a terminál egy print kifejezés, mint az én check_home_view funkció kilátás. Régebben, hogy info, hogy mi volt a kulcs kell hívni az elsődleges kulcsok számát.

Ellenőrizni fogom Andrey megoldást később még ma, és hogy mennyire jól működik. Úgy tűnik, egy kicsit tisztább, mint a megoldás.

Válaszolt 14/02/2020 15:35
a forrás felhasználó

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