Ada*_*dam 2 django django-models django-views
我正在使用 Django 1.3,有以下 2 个模型:
class Person(models.Model):
name = models.CharField(max_length=500)
def __unicode__(self):
return self.name
class Trial(models.Model):
person = models.ManyToManyField(Person, blank=True)
strId = str(id)
def __unicode__(self):
return self.strId
Run Code Online (Sandbox Code Playgroud)
我试图将“名称”的所有条目显示到视图中,但我目前只返回 <django.db.models.fields.related.ReverseManyRelatedObjectsDescriptor 对象在 0x1019b45d0>
我只有在查看页面源时才能看到。否则它看起来就像一个空白的白色屏幕。
观点如下:
def trial_entry(request, trial):
currentTrial = Trial.objects.get(id = 1)
personName = Trial.person
return HttpResponse(personName)
Run Code Online (Sandbox Code Playgroud)
我显然在这里返回了错误的东西,但我已经寻找了另一种方法来做到这一点,但我发现似乎没有任何效果。这是我发现返回错误以外的任何内容的唯一方法,所以我认为这是最好的发布方式。
非常感谢
这里有几个错误。首先,personName不是访问 的任何实际实例Trial,而只是获取有关类中person属性的信息Trial。
所以你需要做的第一件事就是改变你获取人的方式。
currentTrial = Trial.objects.get(pk=1)
personName = currentTrial.person
Run Code Online (Sandbox Code Playgroud)
你看有什么不同吗?我在此视图中访问currentTrial,它是Trial您正在处理的类的实例。到目前为止有意义吗?
现在,currentTrial.person实际上是一个 ManyToMany 管理器,可以迭代通过,因为我们可以有很多人在 Trial 上。因此,我们应该调整变量名称以使其更有意义。
persons = currentTrial.person.all()
Run Code Online (Sandbox Code Playgroud)
您可以更进一步,简单地发送currentTrial到模板上下文,然后像这样访问模板中的试验人员:
{% for person in currentTrial.person.all %}
{{ person }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
希望有帮助!