0

モデルに次のような作成者フィールドがあるブログアプリを作成しました。

author = models.ForeignKey(User)

追加された投稿をログに記録された名のユーザーに取得するために、djangoadminのデフォルトの追加ビューを変更しようとしています。どのように?こちらです:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'author':
        kwargs['initial'] = request.user.id
        return db_field.formfield(**kwargs)

    return super(PostAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

さて、追加ビューでは、作成者フィールドに対応する選択入力にユーザー名が表示されます。この選択では、ユーザー名フィールドではなく、first_name+last_nameフィールドが表示されます。そして最後に、このタスクに成功したら、この選択を非表示にします。ログに記録されたユーザーは、ブログにエントリを送信するユーザーを変更してはなりません。

私はこれに数時間取り組んできましたが、成功しませんでした。助けてください!

たくさんの仲間に感謝します。

4

1 に答える 1

2

作成者の外部キーフィールドにUser.first_name+User.last_nameを表示させる1つの方法は、作成者のユーザーのプロキシモデルを使用することです。

# your_app.models
from django.contrib.auth.models import User


class AuthorUser(User):
    class Meta:
        proxy = True

    def __unicode__(self):
        return '%s %s' % (self.first_name, self.last_name)


class YourModel(models.Model):
    author = models.ForeignKey(AuthorUser)

フィールドを削除するには、単にeditable=Falseとマークすることができます。それがあなたを助けることを願っています。

編集: Django 2.0では、を使用するためにon_deleteパラメーターが必要になりますForeignKey

class YourModel(models.Model):
    author = models.ForeignKey(AuthorUser, on_delete=models.CASCADE)
于 2012-04-22T04:51:24.610 に答える