【发布时间】:2026-01-18 15:25:01
【问题描述】:
Django 文档给出了this 将额外数据与 M2M 关系关联的示例。虽然这是直截了当的,但现在我试图在我的视图中使用额外的数据,感觉非常笨拙(这通常意味着“我做错了”)。
例如,使用上面链接文档中定义的模型,我可以执行以下操作:
# Some people
ringo = Person.objects.create(name="Ringo Starr")
paul = Person.objects.create(name="Paul McCartney")
me = Person.objects.create(name="Me the rock Star")
# Some bands
beatles = Group.objects.create(name="The Beatles")
my_band = Group.objects.create(name="My Imaginary band")
# The Beatles form
m1 = Membership.objects.create(person=ringo, group=beatles,
date_joined=date(1962, 8, 16),
invite_reason= "Needed a new drummer.")
m2 = Membership.objects.create(person=paul, group=beatles,
date_joined=date(1960, 8, 1),
invite_reason= "Wanted to form a band.")
# My Imaginary band forms
m3 = Membership.objects.create(person=me, group=my_band,
date_joined=date(1980, 10, 5),
invite_reason= "Want to be a star.")
m4 = Membership.objects.create(person=paul, group=my_band,
date_joined=date(1980, 10, 5),
invite_reason= "Wanted to form a better band.")
现在,如果我想打印一个简单的表格,为每个人提供他们加入每个乐队的日期,目前我正在这样做:
bands = Group.objects.all().order_by('name')
for person in Person.objects.all():
print person.name,
for band in bands:
print band.name,
try:
m = person.membership_set.get(group=band.pk)
print m.date_joined,
except:
print 'NA',
print ""
感觉很丑,尤其是“m = person.membership_set.get(group=band.pk)”位。我是不是把整件事都搞错了?
现在假设我想在人们加入特定乐队(比如披头士乐队)的日期之前对他们进行排序,我可以在 Person.objects.all() 上添加任何 order_by 子句来让我这样做吗?
任何建议将不胜感激。
【问题讨论】:
标签: django django-models