2017-01-23 2 views
0

djangoのUserモデルに 'スポンサー'という列を追加しようとしています。問題は、この列にユーザー名フィールドを参照させたいということです(空白のままにすることもできます)。Django同じテーブルを参照するUserモデルにフィールドを追加します

(DjangoのUserモデルテーブル)

+--------+------------------+ 
|username| sponsor   | 
+--------+------------------+ 
| Tom | ...    | 
| John | Tom    | 
| Louis | Tom    | 
| Michael| Louis   | 
+--------+------------------+ 

私は次のモデル

を持っている:私は、ユーザー

あるユーザが(なしO)他の多くのスポンサーすることができ、このような何かを意味します

# models.py 
class Sponsor(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    sponsor = models.ForeignKey(User, null=True, to_field='username', related_name='spn') 

私はそれをうまくやっているのか分かりません。しかし、私は管理者ページからスポンサーを追加するために次のことを行っている:私は私の管理ページで新しいユーザーを追加したい場合は

# admin.py 
class SponsorInline(admin.TabularInline): 
    model = Sponsor 
    fk_name = 'sponsor' 

、私がスポンサーを追加するために、3つのスクロールバーを受けています、もちろん、それはOKとは思われません。

Look like this

EDITは、私は私のSponsorInLineクラスにプロパティ

extra = 1 

を追加し、管理者ページは今だけ1行を示しています。しかしまだそれは私が必要とする1対多の関係を働いているようではない

スポンサーのユーザー名を入力するフォームを作る方法はありますか?このすべてを達成する最善の方法は何ですか?

+0

"私はスポンサーを追加するために3つのスクロールバーを受け取っています" - これを明確にするために質問を編集できますか?スクリーンショットを追加すると役立ちます。 –

+0

@GrishaLevit [OK]を、私はそれを追加しました! – rvliscano

+0

'extra'プロパティを使って空行の数を指定することができます。 SponsorInlineクラスに 'extra = 1'を追加しようとします。 – neverwalkaloner

答えて

0

あるユーザーは、現時点では他の多くの(なしO)ユーザー

のスポンサーすることができ、モデル1人のユーザーで構成されてどちらかが多くのユーザーを持つことができ、または1つのスポンサーは、一人のユーザーを持っています。

Userがあなたのモデルではないと仮定すると、あなたが関係に他の方法は明らかに不利なあなたはそれを使用する方法に影響を与えるだろう

class UserSponsor(models.Model): 
    user = models.OneToOneField(User) 
    sponsor = models.ForeignKey(Sponsor) 

を処理するために、中央モデルで構築する必要があると思います。

しかし、あるスポンサーが複数のユーザーをスポンサーできるという可能性を忘れてしまったのではないかと思いますが、その場合スポンサーモデルでとするだけです。

+0

これは私が実装する必要があるものです。ユーザーは他の多くの(または全く)ユーザーのスポンサーになることができます。しかし、1人のユーザーは1人のユーザーのみが後援することができます – rvliscano

関連する問題