1

我将提供此问题所需的所有详细信息。

问题描述:

  • 我用 Django 表单存储了一些输入字段(即FormPredmet
  • 之后,我将表单保存在一个名为 >Predmet
  • 提取数据时,我遇到了ModelForm没有的问题
  • 打印或显示(在页面上) Predmet.predavacIme 对象时,我得到:

<input type="text" name="Ime_Predavaca" value="Elvir" maxlength="50" required id="id_Ime_Predavaca" /> <input type="text" name="Ime_Predavaca" value="Elvir" maxlength="50" required id="id_Ime_Predavaca" /> <input type="text" name="Ime_Predavaca" value="Dzenan" maxlength="50" required id="id_Ime_Predavaca" /> <input type="text" name="Ime_Predavaca" value="Petko" maxlength="50" required id="id_Ime_Predavaca" />

相反,我只想要这些中的每一个的单个值:

所需输出:Elvir, Elvir, Dzenan,Petko

概括:

  • 我使用 FormPredmet(forms.Form) 获取数据这是我认为的问题
  • 然后将数据保存到 Model Predmet
  • 例如,我尝试获取任何 obj:myobj = Predmet.objects.get(pk=1)
  • 在打印其中一个字段后 print(myobj.imePredavaca())
  • 而不是像“Elvir”这样的值,我得到 HTML..input..(我存储了 html 吗?)

楷模models.py

class ModelRazred(models.Model):
    godina = models.PositiveSmallIntegerField()
    brojRazreda = models.PositiveSmallIntegerField()
    ime = models.CharField(max_length=50)
    prezime = models.CharField(max_length=50)


class Predmet(models.Model):
    predavacIme = models.CharField(max_length=50)
    predavacPrezime = models.CharField(max_length=50)
    imePredmeta = models.CharField(max_length=50)
    razred = models.ForeignKey(ModelRazred, on_delete=models.CASCADE)

网址urls.py

"""urlconf for the base application"""


from django.urls import path

from .views import *


urlpatterns = [
    #Base
    path('', home, name='home'),





    # Stranice
    path('dodajrazred/', dodajrazred, name='dodajrazred'),

    path('predmeti/<int:razred_id>/', predmetisubmit, name='predmetisubmit'),
    path('razred/<int:razred_id>/', detail, name='detail'),

    path('predmetisubmit/<int:razred_id>/', predmetisubmit, name='predmetisubmit'),




    # Metode
    path('predmet_submit/<int:razred_id>/', predmet_submit, name='predmet_submit'),


]

意见views.py

    def detail(request, razred_id):

    # Funkcija vraca detalje o odredjenom razredu
    # i njegove ucenike?

    form = FormPredmet()
    detaljiRazreda = ModelRazred.objects.get(pk=razred_id)
    form.razred = detaljiRazreda

    predmeti = Predmet.objects.filter(razred__id = razred_id)
    # svi predmeti tog odredjenog razreda 

    data = {
        'form': form,
        'predmeti':predmeti,
        'razred_id': detaljiRazreda.id,
        'ime' : detaljiRazreda.ime,
        'prezime': detaljiRazreda.prezime
    }

形式forms.py

from django import forms
from .models import ModelRazred, Predmet


class Razred(forms.ModelForm):
    godina = forms.IntegerField()
    brojRazreda = forms.IntegerField()
    ime = forms.CharField(max_length=50)
    prezime = forms.CharField(max_length=50)

    class Meta:
        model = ModelRazred
        fields = ('godina', 'brojRazreda', 'ime', 'prezime')


class FormPredmet(forms.Form):
    Ime_Predavaca = forms.CharField(max_length=50)
    Prezime_Predavaca = forms.CharField(max_length=50)
    Ime_Predmeta = forms.CharField(max_length=50)

    class Meta:
        model = Predmet
        fields = ('Ime_Predavaca', 'Prezime_Predavaca',
                  'Ime_Predmeta', 'razred')

    def save(self, razredID):

        razredPredmeta =  ModelRazred.objects.get(pk=razredID)
        myModel = Predmet(predavacIme=self['Ime_Predavaca'],
                          predavacPrezime=self['Prezime_Predavaca'], 
                          imePredmeta=self['Ime_Predmeta'], razred=razredPredmeta)
        myModel.save()
4

1 回答 1

1

在将表单数据保存到模型之前,您必须对其进行清理。表单返回所有带有 HTML 标记的数据。您可以在docs中查看更多信息。在您的情况下,您需要执行以下操作:

def save(self, razredID):

        razredPredmeta =  ModelRazred.objects.get(pk=razredID)
        myModel = Predmet(predavacIme=self.cleaned_data['Ime_Predavaca'],
                          predavacPrezime=self.cleaned_data['Prezime_Predavaca'], 
                          imePredmeta=self.cleaned_data['Ime_Predmeta'], razred=razredPredmeta)
        myModel.save()

另外,我建议将save()方法从您的方法转移Form到您的方法View- 将模型保存在那里更具可读性,表单仅处理表单数据。

于 2018-06-14T14:23:12.997 回答