好的,我有两种不同的型号:
class topic(models.Model):
learningObjectivesTopic = models.ManyToManyField(learningObjective, verbose_name = "Lernziel")
topic = models.TextField(verbose_name = 'Thema')
和
class learningObjective(models.Model):
learningObjectives = models.TextField(verbose_name = 'Lernziel')
非常基本。我的目标是创建属性“主题”的托管,然后在我想创建新的学习目标时引用它们。我的观点显然不符合我希望他们的工作方式,但我会发布这些观点,以便稍后解释我的目标是什么。
from django.shortcuts import render
from programm.models import *
from django.contrib.auth.decorators import login_required
@login_required(login_url='login')
def lernziel(request):
return render(request, 'lernziel.html', {'topic': topic.objects.all()})
@login_required(login_url='login')
def create_lernziel(request):
neuesLernziel=learningObjective(learningObjectives=request.POST["Lernziel"])
neuesLernziel.save()
neuesLernziel_Topic=topic(topic=request.POST["Thema"])
neuesLernziel_Topic.save()
neuesLernziel_Topic.learningObjectivesTopic.add(neuesLernziel)
return render(request, 'lernziel.html', {'topic': topic.objects.all()})
@login_required(login_url='login')
def themen(request):
return render(request, 'themen.html', {'thema': topic.objects.all()})
@login_required(login_url='login')
def create_themen(request):
neueThemen=topic(topic=request.POST['Thema'])
neueThemen.save()
return render(request, 'themen.html', {'thema': topic.objects.all()})
我想到了这句话:
neuesLernziel_Topic.learningObjectivesTopic.add(neuesLernziel)
我可以参考我即将创建的学习目标和现有主题。但是看起来如何,我的django视图只是创建一个带有新id的新条目,而不是使用具有相同值和旧id的旧条目。为了更清楚:我有:topic1和topic2。我想现在提到4个学习目标。例如lOjj 1和3到主题1和lObj 2和4到主题2.会发生什么,目前django在主题表中创建了4个新的entrys。它现在包含3个值为topic1的赋值,3个赋值为topic2。它应该仍然是2个,并且在manytomany表中它应该使用odl id。如果您需要更多信息或有些不清楚的地方请写下来:)
顺便说一下,我收到了这两个模板的数据: 的 lernziel.html:
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"de-de" }}" >
<head>
<h1 align = "center">Lernziele</h1>
</head>
<body>
<form action="{% url 'create_lernziel' %}" method="post">
{% csrf_token %}
<br>Hallo Benutzer: {{ user.username }}</br>
Lernziel: <textarea name="Lernziel" rows="3" cols="45" ></textarea>
<p>
<select name="Thema" size="3">
{% for topic_ in topic %}
<option>{{ topic_.topic }}</option>
{% endfor %}
</select>
</p>
<input type="submit" value="Absenden" />
</form>
<table border="1">
<th>Lernziel</th>
<th>Thema</th>
{% for topic_ in topic %}
<tr>
{% for lObj in topic_.learningObjectivesTopic.all %}
<td>{{ lObj }}</td>
{% endfor %}
<td>{{ topic_.topic }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
和 themen.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<br>Hallo Benutzer: {{ user.username }}</br>
<form action="{% url 'create_themen' %}" method="post">
{% csrf_token %}
<br>Thema: <textarea name="Thema" rows="3" cols="45"></textarea></br>
<input type="submit" value="Absenden" />
</form>
</br>
<table border="1">
<th>Thema</th>
{% for thema_ in thema %}
<tr>
<td>{{ thema_.topic }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
答案 0 :(得分:0)
问题不在于该行:它与前两行明确地创建了一个新主题。如果要将目标与现有主题相关联,则需要使用get
从数据库中获取它,而不是实例化新目标并调用save()
。
neuesLernziel=learningObjective(learningObjectives=request.POST["Lernziel"])
neuesLernziel.save()
neuesLernziel_Topic = Topic.objects.get(topic=request.POST['Thema'])
neuesLernziel_Topic.learningObjectivesTopic.add(neuesLernziel)
您可能希望通过ID发布/查询,而不是“主题”文本。