0

Django User Profiles - Simple but strongの手順に少し従いました。

私はアイデアを開発している最中なので、まったく同じではありません。私が特に使用したこのサイトから、この行も:

User.profile = プロパティ (ラムダ u: UserProfile.objects.get_or_create(user=u)[0])

オブジェクトの作成時に常にエラー メッセージが表示されていました。通常、「XX」は null ではない可能性があります。モデルと (私の場合は) sqliteman をいじって、問題の一部を解決しました。IDで同じメッセージが表示されるまで:「xxx.idはnullではない可能性があります」。

ネット上で、データベースのリセットを行うことを含む可能な解決策の説明を見つけましたが、私はそれを行うことにあまり満足していませんでした. 特に、さまざまなソリューションの場合、アプリケーション データベースのリセットが必要になる可能性があります。

しかし、UserProfile モデルはちょっと新しく、今まで空っぽだったので、DB で直接操作し、手動でテーブルを削除し、syncdb に再構築を依頼しました。(ちょっと危険な考え)。

これは、sqlite ダンプの差分です。

294,298c290,294
< CREATE TABLE "myt_userdata" (
<     "id" integer NOT NULL PRIMARY KEY,
<     "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
<     "url" varchar(200),
<     "birthday" datetime
---
> CREATE TABLE myt_userdata (
>     "id" INTEGER NOT NULL,
>     "user_id" INTEGER NOT NULL,
>     "url" VARCHAR(200),
>     "birthday" DATETIME

どちらのバージョンも django によって生成されることに注意してください。">" バージョンは単純なモデル定義で生成され、実際には次の方法でユーザー テーブルと接続されていました。

user = models.ForeignKey(User, unique=True)

新しい「<」バージョンにはより多くの情報があり、機能しています。

私の質問:

myt_userdata.idがnullではない可能性があるとDjangoが不平を言うのはなぜですか?

副次的な質問:

Django は下線付きの db 構造にどのように関連付けようとしますか? (たとえば、not NULL メッセージはモデルまたは DB から送信されますか?)

追加の質問:

私は南部での使用に少し気が進まなかった: あまりにも複雑で、開発と本番の間で気にしなければならないかもしれない追加モジュールと、DB エンジンを切り替えたい場合はそれほど簡単ではないかもしれない (私は開発段階でのみ sqlite を使用しており、私は計画している) mysql に移動します)。

この場合、おそらく南が機能した可能性があります。それはうまくいくでしょうか?とにかくその使用を提案しますか?

編集されたFIY:

これは私の最後のモデルです(動作中のモデル):

class UserData(models.Model):

    user = models.ForeignKey(User, unique=True)

    url = models.URLField("Website", blank=True, null=True)

    birthday = models.DateTimeField('Birthday', blank=True, null=True)

    def __unicode__(self):
        return self.user.username

User.profile = property(lambda u: UserData.objects.get_or_create(user=u,defaults={'birthday': '1970-01-01 00:00:00'})[0])
4

1 に答える 1

1

myt_userdata.idがnullではない可能性があるとDjangoが不平を言うのはなぜですか?

idただし、主キーではなく、自動的に入力されないためです。また、モデルの作成時にそれを提供しないため、DB は何をすべきかわかりません。

Django は下線付きの db 構造にどのように関連付けようとしますか? (たとえば、not NULL メッセージはモデルまたは DB から送信されますか?)

Django からではなく、DB からのエラーです。

sql コマンドを使用して、syncdb で実行される内容を正確に理解できます。上記のバリアントは、正しい Django モデルから作成された正しいテーブル定義のようですが、どのようにして以下のバリアントを取得したのかわかりません。正しく明確なモデルを作成すると、後で正しく機能するテーブル スキームが得られます。syncdb

于 2012-05-16T00:03:38.427 に答える