Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有外键的Django CRUD更新模型_Python_Django_Crud - Fatal编程技术网

Python 具有外键的Django CRUD更新模型

Python 具有外键的Django CRUD更新模型,python,django,crud,Python,Django,Crud,问题1:加入克拉森。。。这是可行的,但在html中,richting和leraar是一个列表,您可以在其中选择一个,但它显示了完整的描述,如naam和omschrijving。我只想让它显示纳姆 问题2:当我尝试编辑时,它会给我一个klas.richting.naam的输入。但当我尝试更新它时,它会给ma一个错误: 即使我什么都没改变 models.py class Richtingen(models.Model): naam = models.CharField(max_length=

问题1:加入克拉森。。。这是可行的,但在html中,richting和leraar是一个列表,您可以在其中选择一个,但它显示了完整的描述,如naam和omschrijving。我只想让它显示纳姆

问题2:当我尝试编辑时,它会给我一个klas.richting.naam的输入。但当我尝试更新它时,它会给ma一个错误: 即使我什么都没改变

models.py

class Richtingen(models.Model):
    naam = models.CharField(max_length=100)
    omschrijving = models.TextField(max_length=2000)
    def __unicode__(self):
        return u'%s %s' % (self.naam, self.omschrijving)
class Leraren(models.Model):
    naam = models.CharField(max_length=100)
    voornaam = models.CharField(max_length=100)
    foto = models.ImageField(upload_to = 'leerkrachten', default='leerkrachten/anoniem.png')
    email = models.EmailField()
    def __unicode__(self):
         return u'%s %s %s %s' % (self.naam, self.voornaam, self.foto, self.email)

class Klassen(models.Model):
    naam = models.CharField(max_length=100)
    numeriekeCode = models.CharField(max_length=100)
    richting = models.ForeignKey(Richtingen, on_delete=models.CASCADE)
    leraar = models.ForeignKey(Leraren, on_delete=models.CASCADE)

    def __unicode__(self):
        return u'%s %s %s %s' % (self.naam, self.numeriekeCode, self.richting, self.leraar)
forms.py

class RichtingForm(ModelForm):
    class Meta:
        model = Richtingen
        fields = ['naam', 'omschrijving']

class LeraarForm(ModelForm):
    class Meta:
        model = Leraren
        fields = ['naam', 'voornaam', 'foto', 'email']

class KlasForm(ModelForm):
    class Meta:
        model = Klassen
        fields = ['naam', 'numeriekeCode', 'richting', 'leraar']
views.py

def edit_klassen(request, id):
    klas = Klassen.objects.get(id=id)
    edit = True
    context = {"klas": klas,
        'edit': edit}
    return render(request, 'main_app/klassen.html', context)

def edit_richtingen(request, id):
    richting = Richtingen.objects.get(id=id)
    edit = True
    context = {"richting": richting,
        'edit': edit}
    return render(request, 'main_app/richtingen.html', context)

def edit_leraren(request, id):
    leraar = Leraren.objects.get(id=id)
    edit = True
    context = {"leraar": leraar,
         'edit': edit}
    return render(request, 'main_app/leraren.html', context)

def create_richting(request):
    form = RichtingForm(request.POST, request.FILES)
    if form.is_valid():
        form.save(commit = True)
    return HttpResponseRedirect('/richtingen')

def create_leraar(request):
    form = LeraarForm(request.POST, request.FILES)
    edit = False
    if form.is_valid():
       form.save(commit = True)
    return HttpResponseRedirect('/leraren') 

def create_klas(request):
    form = KlasForm(request.POST, request.FILES)
    if form.is_valid():
       form.save(commit = True)
    return HttpResponseRedirect('/klassen') 

def update_leraren(request, id):
    Leraren.objects.get(id=id).delete()
    form = LeraarForm(request.POST, request.FILES)
    if form.is_valid():
       form.save(commit = True)
    return HttpResponseRedirect('/leraren')


def update_richtingen(request, id):
    richting = Richtingen.objects.get(id=id)
    richting.naam = request.POST['naam']
    richting.omschrijving = request.POST['omschrijving']
    richting.save()
    edit = False
    context = {"richting": richting,
        'edit': edit}
    return HttpResponseRedirect('/richtingen')

def update_klassen(request, id):
    klas = Klassen.objects.get(id=id)
    klas.naam = request.POST['naam']
    klas.numeriekeCode = request.POST['numeriekeCode']
    klas.richting = request.POST['richting']
    klas.leraar = request.POST['leraar']
    klas.save()
    edit = False
    context = {"klas": klas,
        'edit': edit}
    return HttpResponseRedirect('/klassen')
klassen.html

#edit
form class="all_forms" action="../update/{{klas.id}}" method="POST">
     {% csrf_token %}
     <label for="naam">Vak:</label> <input type="text" name="naam" id="naam" value='{{klas.naam}}' placeholder='{{klas.naam}}' /><br>
     <label for="numeriekeCode">Klaslokaal:</label> <input type="text" name="numeriekeCode" id="numeriekeCode" value='{{klas.numeriekeCode}}' placeholder='{{klas.numeriekeCode}}' /><br>
    <label for="richting">Richting:</label> <input type="text" name="richting" id="richting" value='{{klas.richting.naam}}' placeholder='{{klas.richting}}' /><br>
    <label for="leraar">Leraar:</label> <input type="text" name="leraar" id="leraar" value='{{klas.leraar}}' placeholder='{{klas.leraar}}' /><br>
    <br>
   <div>
       <button type="submit" name="submit">Wijzigen</button>
  </div>
  </form>

# create
<form class="all_forms" action="create_klas/" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
     <div>
         <button type="submit" name="submit">Verzenden</button>
     </div>
 </form>
#编辑
form class=“all_forms”action=“../update/{{{klas.id}}”method=“POST”>
{%csrf_令牌%}
Vak:
克拉斯洛卡尔:
里奇廷:
莱拉尔:

维吉根 #创造 {%csrf_令牌%} {{form.as_p}} 弗森登
对于您应该修改的第一个问题:

class Richtingen(models.Model):
    naam = models.CharField(max_length=100)
    omschrijving = models.TextField(max_length=2000)
    def __unicode__(self):
        return u'%s %s' % (self.naam, self.omschrijving)

对于第二个实例,您应该更改表单并提供Richtingen实例,因为它显示错误:

<label for="richting">Richting:</label> <input type="text" name="richting" id="richting" value='{{klas.richting}}' placeholder='{{klas.richting}}' /><br>
Richting:

对于问题1:它起作用了,但您能解释一下吗,因为在另一页上,我使用了“omschrijving”,并且在函数中使用了“删除”,而在另一页上,unicode仍然适用于omschrijving to。只是想知道这是怎么来的?它只是一个返回带有系统编码的结果的方法,返回什么取决于您。此方法中的更改不应影响任何功能。第二种形式呢?对于问题2:将klas.richting改为klas.richting.naam有效!通常,更好的做法是创建表单,并将其与上下文一起传递到要呈现表单的页面。在您的情况下,您创建表单,但不在模板中使用它!查看django教程了解更多信息@enzotrocompeners如果一切正常,请将我的答案标记为有用。
<label for="richting">Richting:</label> <input type="text" name="richting" id="richting" value='{{klas.richting}}' placeholder='{{klas.richting}}' /><br>