Django - προσπαθεί να περάσει μια παρουσία ενός πεδίου μοντέλου σε ένα πεδίο φόρμας

ψήφοι
0

Πάω να κάνω το καλύτερό μου για να μην ακούγεται σαν μια πραγματική εικονική, αλλά όχι υποσχέσεις. Είμαι νοσηλευτής και προσπαθώ να κάνω μια εφαρμογή σε μονάδα έγγραφο ελέγχους electronically.I έχουν ένα μοντέλο πεδίο που είναι ξένες κλειδωμένη σε μερικά άλλα μοντέλα στο έργο μου. Αυτό το πεδίο ορίζει τη μονάδα ο χρήστης στελέχωσης για εκείνη την ημέρα. Θέλω το χρήστη να επιλέξει τη μονάδα αυτός / αυτή έχει στελέχωση εκείνη την ημέρα και να έχουν οι πληροφορίες αυτόματης συμπλήρωσης τυχόν έντυπα συμπληρώνονται για τη σύνοδο αυτή. Έχω δοκιμάσει την αποθήκευση του αντικειμένου χρησιμοποιώντας συνεδρίες και παίρνω αυτό το «αντικείμενο του τύπου“MedicUnit”δεν είναι το JSON serializable». Έχω χρησιμοποιήσει τη μέθοδο model_to_dict και προσπάθησε να περάσει το string του ονόματος μονάδας μέσω του form_valid μέθοδο, αλλά παίρνω αυτό το «Μπορεί να μην εκχωρήσει“«Medic 2”: ““ παράδειγμα”DailyCheck.medic_unit_number” πρέπει να είναι»MedicUnit Είμαι σχετικά νέος στον προγραμματισμό και Django και αυτό φαίνεται σαν ένα πολύ εύκολο πρόβλημα για λύση, αλλά τις ικανότητές google αναζήτηση μου δεν μου πάρει οπουδήποτε. Εδώ είναι ο κωδικός μου:

Model.py για την προέλευση του πεδίου μοντέλο 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 για μία από τις ξένες βασικές αναφορές στην 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 για την απ 'ευθείας παραπάνω μοντέλο

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']
Δημοσιεύθηκε 13/02/2020 στις 23:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Νομίζω ότι μπορείτε να χρησιμοποιήσετε MedicUnit.id. Αυτό θα πρέπει να είναι επαρκής για να επιλύσει το ζήτημα της προετοιμασία του πεδίου από τη σύνοδο και σε άλλες μορφές:

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})
Απαντήθηκε 14/02/2020 στις 00:17
πηγή χρήστη

ψήφοι
0

Σας ευχαριστώ πολύ για την απάντηση Andrey. Θα προσπαθήσω ότι πάρα πολύ. Βρήκα ότι το μόνο που είχα να κάνω ήταν να εισάγει το μοντέλο MedicUnit με την άποψή μου και να αλλάξετε form_valid μέθοδος μου με το ακόλουθο:

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)

Προφανώς συνεδρίες δεν μπορεί να αποθηκεύσει αντικείμενα αφού μετά Django 1.5 νομίζω. Κάποιος μπορεί να ελέγξει γεγονός μου σε αυτό. Γι 'αυτό και αναφέρεται ένα παράδειγμα του αντικειμένου με ένα λεξικό αξία από τα δεδομένα model_to_dict αποθηκεύονται στη σύνοδο με την κλήση MedicUnit.object.get.

Εάν έχετε το ίδιο πρόβλημα, μπορείτε να εκτυπώσετε τις πληροφορίες συνεδρία με το τερματικό με μια δήλωση εκτύπωσης όπως και σε check_home_view την άποψη της λειτουργίας μου. Θα χρησιμοποιηθεί για αυτές τις πληροφορίες για να δούμε τι κλειδί ήταν απαραίτητη για να καλέσετε τον αριθμό πρωτεύον κλειδί.

Θα ελέγξει λύση αργότερα σήμερα Αντρέι και να δείτε πόσο καλά ότι τα έργα. Φαίνεται ένα πιο καθαρό κομμάτι από τη λύση μου.

Απαντήθηκε 14/02/2020 στις 15:35
πηγή χρήστη

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