2

ユーザープロファイルのモデルがいくつかあり、いくつかの種類の情報を保存できるようにしたいのですが、いくつかの違い (自宅や職場の電話番号など) がありますが、ForeignKey リレーションを使用したくありません ...どうすればよいですか?それを行う?

何かのようなもの:

class Profile(models.Model):
    phone = ? list of some kind ?

    class Phone(???):
        TYPE_CHOICES = (
                ('H', 'Home'),
                ('W', 'Work'),
                ('F', 'Fax'),
                )
        type = models.CharField(max_length = 1, choices = TYPE_CHOICES) 
        number = models.CharField(max_length = 16)
        private = models.BooleanField()

ありがとうございました!

編集:もともとユーザーに関連するすべての情報をプロファイル管理ページに表示したかったという理由だけで、外部キーを使用したくありませんでした。しかし...まあ...それはあまり重要ではありません

4

1 に答える 1

3

外部キーを使用したくないのはなぜですか? 複数の電話番号を持ちたい場合は、それが必要な方法です。

Django と外部キーの操作は簡単で、インライン モデル フォームセットを管理ページに簡単に追加して、多数の電話番号を含むユーザー プロファイルを作成/編集できます。

モデルは次のようになります。

class Profile(models.Model):
    name = models.CharField(max_length=40, verbose_name="User name")

class Phone(models.Model):

    TYPE_CHOICES = (
        ('H', 'Home'),
        ('W', 'Work'),
        ('F', 'Fax'),
    )

    profile = models.ForeignKey(Profile)
    type = models.CharField(max_length = 1, choices = TYPE_CHOICES) 
    number = models.CharField(max_length = 16)
    private = models.BooleanField()

次に、このようなものを使用して、1 つの管理ページでプロファイルごとに複数の電話番号を簡単に追加/編集できます。

あなたの例では、次のようなことを行う必要があります(djangoアプリのadmin.pyファイル内):

class PhoneInline(admin.TabularInline):
    model = Phone

class ProfileAdmin(admin.ModelAdmin):
    inlines = [
        PhoneInline,
    ]

admin.site.register(Profile, ProfileAdmin)

これで、管理インターフェイスに移動して、新しいプロファイルを追加できます。プロファイルごとに複数の電話を追加できることがわかります。お役に立てば幸いです...

最後に、django のチュートリアルのツアーに参加することをお勧めします。あなたは多くのことを理解し、それをどのように扱うかについて良い考えを得るでしょう.

于 2012-06-02T04:59:24.863 に答える