访问Django中间模型组中的字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问Django中间模型组中的字段相关的知识,希望对你有一定的参考价值。
我正在创建一个包含Person和Membership的Group模型,所有这些都在Django docs中描述。
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
leader = models.BooleanField(default=False)
group = models.ForeignKey(Group)
我只是在视图中完成所有这些,因为我想在我的网络应用程序中将此“创建组”作为一个功能。
views.朋友:
@login_required
def groups(request):
user = request.user
if request.method == "POST":
form = GroupForm(request.POST)
if form.is_valid():
formm = form.save(commit=False)
g = Group.objects.create(name = formm.name)
p = Person.objects.create(name=request.user)
m = Membership.objects.create(person=p, group=g, leader=True)
gr = Group.objects.all()
per = Person.objects.all()
mem = Membership.objects.all()
context = {
'gr': gr,
'per':per,
'mem':mem,
'form': form,
}
return render(request, 'groups.html', context )
else:
gr = Group.objects.all()
per = Person.objects.all()
mem = Membership.objects.all()
form = GroupForm()
context = {
'gr': gr,
'per':per,
'mem':mem,
'form': form,
}
return render(request, 'groups.html', context)
groups.html:
{% block profile %}
<div class="jumbotron">
<h4>Create a new group here:</h4>
<form method="POST" class="post-form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Go!</button>
</form>
</div>
{% for m in mem %}
<div class="jumbotron">
<br>
<p><b>Name of group:</b> {{ m.group }} </p>
<p><b>Member:</b> {{ m.person }} </p>
<br>
</div>
{% endfor %}
{% endblock %}
问题是我想要使用的时候
Membership.objects.filter(person=request.user)
并得到错误:
ValueError at /groups/
Cannot query "damian": Must be "Person" instance.
其中达米安是request.user
的名字
我只想过滤这个以在模板中显示只选择的成员资格,组等...
有人知道怎么修这个东西吗?
答案
这样做,
Membership.objects.filter(person__name=request.user)
要么
p = Person.objects.get(name=request.user)
Membership.objects.filter(person=p)
您必须在Person
过滤器查询中将person
类实例传递给Membership
参数。
以上是关于访问Django中间模型组中的字段的主要内容,如果未能解决你的问题,请参考以下文章