4

私のアプリでは、 を に関連付ける必要がありUserますuser-selected-filename

ユーザーは 1 つのファイル名しか選択できませんが、多くのユーザーが同じファイル名を選択する可能性があります。

したがって、データベーステーブルは次のようになります

auth_user(作成者django.contrib.auth)

-----------------------------------------
id | username | first_name | last_name | ...
------------------------------------------
1  |  bert     |  bert     | russel    |...
------------------------------------------
2  |  jon      |  jon      | snow      | ...
-------------------------------------------
3  |  alice    | alice     | tanner    | ...

ユーザーファイルテーブル

-----------------------------------------------
id  | filename              
------------------------------------------------
1   |  '/clips/summary.mp4'  
------------------------------------------------
2   | '/clips/intro.mp4'    
------------------------------------------------

user_userfile テーブル

-----------------------------------
 user_id   |    userfile_id
-----------------------------------
   1       |    1
-----------------------------------
   2       |    1
-----------------------------------
   3       |    2
-----------------------------------

関係のようuserfile--userです。1 - n1 つのユーザーファイルを多くのユーザーに関連付けることができます。

では、この関係を表すには何を使用すればよいでしょうか? 以下のクラス UserFile で、使用する場合

user = db.models.ForeignKey(django.contrib.auth.User)

それは逆の関係を作るだけです(つまりn-1、 for userfile--user

class UserFile(db.models.Model):
    filename = db.models.CharField()
    user     = ??
4

2 に答える 2

3

私もOneToManyフィールドが本当に欲しいです。しかし、Django にそのようなフィールドがない理由は、関連するモデルのテーブルに FK が作成されるためです。

  1. それはちょっと紛らわしい

  2. Syncdb は列を既存のテーブルに追加できません。

関連モデルに FK を追加する解決策は、「サポートされていない」機能を使用することです。

from django.contrib.auth.models import User
models.ForeignKey(Badge, null=True, blank=True).contribute_to_class(User, 'badge')

次に、migrate auth_userを追加して FK を追加する必要があります。

于 2012-06-11T06:45:28.263 に答える
0

これにはユーザープロファイルを使用できますが、少しやり過ぎになると思います。

class UserProfile(models.Model):
    file = models.ForeignKey(UserFile)

次にAUTH_PROFILE_MODULE、settings.py で設定を行い、syncdb を実行します。

これで、 を使用user.get_profile().fileして に関連付けられたファイルにアクセスできますuser

ユーザープロファイルのチュートリアル

于 2012-07-06T09:47:29.027 に答える