1

管理者のメソッドをオーバーライドしようとしているsave()ので、パブリッシャーユーザーがカスタマーユーザーを作成しているときに、パブリッシャーフィールドに現在のユーザーの値が自動的に割り当てられます。

ValueError: Cannot assign "User: foo": "SimpleSubscriber.publisher" must be a "Publisher" instance.

私はこのチュートリアルを使って始めました:ここ。

def save_model(self, request, obj, form, change):
    if not change:
        obj.publisher = request.user
    obj.save()

これはsaveメソッドのオーバーライドです。管理者にアクセスできる唯一のユーザーはパブリッシャーであり、パブリッシャーモデルとSimpleSubscriberモデルはどちらもユーザーモデルです。

class Publisher(User):
    def __unicode__(self):
        return self.get_full_name()

class SimpleSubscriber(User):
    publisher = models.ForeignKey(Publisher)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=100)
    state = USStateField()
    zipcode = models.CharField(max_length=9)
    phone = models.CharField(max_length=10)
    date_created = models.DateField(null=True)
    sub_type = models.ForeignKey(Product)
    sub_startdate = models.DateField()
    def __unicode__(self):
        return self.last_name

request.user新しいSimpleSubscriberを現在のパブリッシャーユーザーに割り当てるには、何に置き換えることができますか?

4

1 に答える 1

1

request.userのインスタンスに置き換える必要がありますPublisher

そのための1つの方法は次のとおりです。

Publisher.objects.get(**{Publisher._meta.get_ancestor_link(User).name: request.user})

もちろん、それはあなたがそれを呼び出すたびにルックアップを行うので、あなたはすべてのリクエストでこれを行うようにアプリケーションを設計したいかもしれません。

これを行う別の方法は、djangoモデルシステムを(わずかに)悪用することです。あるモデルが別のモデルから継承する場合、対応する親モデルインスタンスと子モデルインスタンスは同じidです(デフォルト)。

Publisher.objects.get(id = request.user.id)
于 2012-07-19T21:57:04.520 に答える