1

わかりましたので、私は Django を初めて使用します (そして一般的にプログラミングを行い、複数のタイプのユーザーを必要とする Web サイトを構築しています。AUTH_PROFILE_MODULE にある基本クラスを作成し、基本クラスから継承するさまざまなユーザー タイプを持ちます。私の問題は、テンプレートの基本クラスから継承するクラスから保存されたデータにアクセスする方法です.基本クラス内にあるものにはuser.get_profile.fieldを使用できることは知っていますが、フィールドでは機能しません基底クラスの外側を持っているので、私のコードを見ていただけると分かりやすいかもしれません...

models.py

class BaseProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    #Other common fields
    ...

class StudentProfile(BaseProfile):
    user_type = models.CharField(max_length=20, default="student")
    #Other student specific fields
    ...

class InstructorProfile(BaseProfile):
    user_type = models.CharField(max_length=20, default="instructor")
    #Other instructor specific fields
    ...

設定.py

AUTH_PROFILE_MODULE = 'signup.BaseProfile'

インストラクター用と学生用に別々のフォームがあり、それぞれに HiddenInput フィールドとして user_type があるため、ユーザーが変更できないため、デフォルトで希望どおりになります。また、必要なさまざまなフォーム情報に対応するようにシグナルを設定しました。管理者で、使用されているフォームに応じて、シグナルが user_type をそれぞれ「インストラクター」または「学生」として正常に保存することを確認できますが、テンプレートでそれを取得する方法がわかりません。次のようないくつかのバリエーションを試しました。

template.html

{% if user.get_profile.user_type == "instructor" %}
{% if user.user_type == "instructor" %}
{% if user.InstructorProfile.user_type == "instructor" %}

繰り返しになりますが、私は Python だけでなく、プログラミング全般に非常に慣れていないため、十分な情報を提供したり、明確に説明したりしていない場合は、ご容赦ください。助けてくれてありがとう。他に情報を提供する必要がある場合はお知らせください。検索しても答えが見つかりません。

4

2 に答える 2

0

最初のバリエーションは正しいものですが、問題は user_type フィールドが基本クラスではなくサブクラスにあることです。get_profileDjango は、データベースからどのような種類のサブクラスを期待しているかを単純に知る方法がないため、 を実行すると、基本クラスのみが取得されます。

サブクラスに user_type フィールドを配置してデフォルトを設定するのではなく、それを基本クラスに配置し、saveメソッドをオーバーライドして適切に設定します。

于 2012-09-04T15:21:47.700 に答える
0

django-polymorphicを見ることができます。これは、この種の優れたメカニズムを提供します。

于 2012-09-13T19:25:49.047 に答える