2016-11-24 11 views
0

したがって、私はDjangoの管理パネルをカスタマイズして、さまざまなレベルのアクセスと権限で異なるロールを作成しています。異なる役割については、特定のモデルに対して異なるフィールドを表示する必要があります。例えば は、のは、私は以下のモデルを持っているとしましょう:タプルにすべてのフィールド名を入力せずにget_fieldsのすべてのフィールドを取得する

class Venue(models.Model): 
    venue_name = models.CharField(max_length=255) 
    area = models.CharField(max_length=255) 
    description = models.TextField() 
    address = models.TextField() 
    contact_info = models.CharField(max_length=100) 
    email = models.EmailField() 

さらに、私は、DjangoのUserクラスを拡張して、ユーザロールを定義する整数値をとるUSER_TYPEと呼ばれるフィールドを定義しています。

@admin.register(Venue) 
class VenueAdmin(admin.ModelAdmin): 
    def get_fields(self, request, obj=None): 
     if request.user.user_type == 1: 
      return ('sport','venue') 
     elif request.user.user_type == 2: 
      return ('sport', 'venue', 'description', 'address') 
を:今、私はそうUSER_TYPEの== 2で== 1、最初の4つのフィールドをUSER_TYPEするだけ最初の2つのフィールドを表示したい、私はadmin.pyに次のように書いた

これは2人のユーザーにとってうまくいきます。私が直面している問題は、スーパーユーザーとしてログインするときに "Nonetype is iterable not"エラーが発生することです。ですから、私が持っている質問は、タプルのすべてのフィールド名を1つずつ書き込むという点で、すべてのフィールドを返す簡単な方法があるということです。

非常に簡単な作業のために苦労しているような気がします。

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

答えて

2

Nonetype is not iterableエラー(TypeError)は、あなたのget_fieldsが何も返されなかったことを意味します。 user.user_typeが1または2でない場合、関数は何も返しません(実質的にはNoneを返します)。

def get_fields(self, request, obj=None): 
    if request.user.user_type == 1: 
     return ('sport','venue') 
    elif request.user.user_type == 2: 
     return ('sport', 'venue', 'description', 'address') 
    elif request.user.is_superuser: 
     return super(VenueAdmin, self).get_fields(request, obj) 
    else: 
     return() # default case; up to you to decide 

こうしてスーパーユーザーはすべてのフィールドを取得する必要があります。

関連する問題