私はdjango 1.4を使用しており、次のモデルがあります:
class Newsletter(EmailTemplate):
receivers = models.ManyToManyField(User, related_name='newsletters',
db_index=True,
through='NewsletterReceiver')
class EmailReceiver(models.Model):
user = models.ForeignKey(User, db_index=True)
class NewsletterReceiver(EmailReceiver):
newsletter = models.ForeignKey(Newsletter, db_index=True)
Newsletter
次のようなことをして、ビューにオブジェクトを作成すると:
newsletter = form.save(commit=False)
newsletter.receivers.clear()
receivers = form.cleaned_data['receivers']
for receiver in receivers:
newsletter_receiver = NewsletterReceiver(user=receiver, newsletter=newsletter)
newsletter_receiver.save()
form.save_m2m()
newsletter.save()
Newsletter
オブジェクトとオブジェクトの両方が作成されていることがわかりNewsletterReceiver
ます。新しく作成されたものからと のipython
両方を照会する場合はすべて問題ありませんが、インスタンスから受信者を照会すると、django は私が理解できないことについて不平を言います:user
newsletter
NewsletterReceiver
Newsletter
In [2]: nr = NewsletterReceiver.objects.all()[0]
In [3]: nr.user
Out[3]: <User: 3>
In [4]: nr.newsletter
Out[4]: <Newsletter: Newsletter object>
In [5]: nr.newsletter.receivers
Out[5]: <django.db.models.fields.related.ManyRelatedManager at 0x10ea26f90>
In [6]: nr.newsletter.receivers.all()
Out[6]:
<repr(<django.db.models.query.QuerySet at 0x10ee860d0>) failed:
django.db.utils.DatabaseError: column web_newsletterreceiver.user_id does not exist
LINE 1: ...N "web_newsletterreceiver" ON ("auth_user"."id" = "web_newsl...
^
>
これForeignKey
は対象機種への仕様が引き継がれているためでしょうか。そのための回避策はありますか、それともモデルをリファクタリングする必要がありますか?