2016-11-21 2 views
0

私は、グループと呼ばれるモデルとグループメンバーシップというモデルを持っています。私がしようとしているのは、自分のフィールドの1つに、別の文字列を返すことです。 フロントエンドで正しく表示されますが、データベースに書き込むときにはすべてが1つの文字列になります。私がやろうとしているのは、group_nameを取得し、データベースに書き込むときに残りの文字列を切り捨てることです。 私は同じモデルから会社や部署を後でつかむ必要があるので、それ以上の価値を返す方法を目指しています。モデルチョイスフィールドのdjangoモデルから独立して複数の値を返す

マイモデル

# Group # 
######### 
class Group(models.Model): 
    created_by = models.ForeignKey('auth.User', related_name='group_created_by') 
    id = models.AutoField(primary_key=True) 
    company = models.ForeignKey(Company) 
    department = models.ForeignKey(Department) 
    group_name = models.CharField(max_length=100) 
    role = models.CharField(max_length=100) 
    status = models.CharField(max_length=8) 
    created_date = models.DateTimeField(default=timezone.now) 
    modified_date = models.DateTimeField(blank=True, null=True) 
    modified_by = models.ForeignKey('auth.User', 
      related_name='group_modified_by', 
      blank=True, null=True) 

    def create(self): 
     self.save() 

    def __str__(self): 
     return '{}{}{}'.format(self.company, self.department, self.group_name) 

マイフォーム

# Group Name # 
############## 
class GroupNameModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return '{}'.format(obj.group_name) 


# Group Membership # 
#################### 
class GroupMembershipForm(forms.ModelForm): 
    options = (('Enabled', 'Enabled',), ('Disabled', 'Disabled')) 
    member_id = forms.CharField(
      widget=forms.TextInput(attrs={'class': 'form-control'}) 
      ) 
    company = forms.ModelChoiceField(
      queryset=Company.objects.filter(status='Enabled'), 
      widget=forms.Select(attrs={'class': 'form-control'}), 
      empty_label='' 
      ) 
    department = forms.ModelChoiceField(
      queryset=Department.objects.filter(status='Enabled'), 
      widget=forms.Select(attrs={'class': 'form-control'}), 
      empty_label='' 
      ) 
    group_name = GroupNameModelChoiceField(
      queryset=Group.objects.filter(status='Enabled'), 
      widget=forms.Select(attrs={'class': 'form-control'}), 
      empty_label='' 
      ) 
    user_id = forms.ModelChoiceField(
      queryset=Person.objects.filter(status='Enabled'), 
      widget=forms.Select(attrs={'class': 'form-control'}), 
      empty_label='' 
      ) 
    full_name = forms.CharField(
      widget=forms.TextInput(attrs={'class': 'form-control'}), 
      ) 
    status = forms.CharField(
      widget=forms.Select(
       attrs={'class': 'form-control'}, 
       choices=options 
       ) 
      ) 

    class Meta: 
     model = GroupMembership 
     fields = ('member_id', 'company', 'department', 'group_name', 
       'user_id', 'full_name', 'status') 
+0

コードを見ると、有罪の部分は '__str__'メソッドであるように見えます。しかし、あなたの質問を明確にするために、あなたが送るもの、期待するもの、見たものを追加することはできますか? – Aditya

+0

たとえば、Western Regionというグループ名の場合は送信されますが、データベースに書き込まれるのはABC Pipeline INC Engineering Services Western Regionです。私はちょうど西部地域を書く必要があります。 – penguio

+0

非常に恐らく、 '__str__'メソッドの戻り値が書き込まれています。 '__str__'メソッドの値を管理ビューに使用している場合は、より良い方法があります。 '__str__'は' group_name'のような単一の値を返すようにしてください。あなたが解決策を確認したら、私はあなたが私が話したよりよい方法へのリンクを与えるでしょう(私は不必要にそれについて話したいと思っていないので、私は言っています:)) – Aditya

答えて

1
# Group # 
######### 
class Group(models.Model): 
    created_by = models.ForeignKey('auth.User', related_name='group_created_by') 
    id = models.AutoField(primary_key=True) 
    company = models.ForeignKey(Company) 
    department = models.ForeignKey(Department) 
    group_name = models.CharField(max_length=100) 
    role = models.CharField(max_length=100) 
    status = models.CharField(max_length=8) 
    created_date = models.DateTimeField(default=timezone.now) 
    modified_date = models.DateTimeField(blank=True, null=True) 
    modified_by = models.ForeignKey('auth.User', 
      related_name='group_modified_by', 
      blank=True, null=True) 

    def create(self): 
     self.save() 

    # Please rename to something sensible 
    @property 
    def get_special_combination_value(self): 
     return '{}{}{}'.format(self.company, self.department, self.group_name) 

    def __str__(self): 
     return self.group_name 

@propertyを使用するには:

from <yourapp>.models import Group 

obj = Group() 
# following line will print the special string 
obj.get_special_combination_value 

プロパティ値としてDjangoのadminにも使用することができます。

class GroupAdmin(admin.ModelAdmin): 
    list_display = ('get_special_combination_value',) 

admin.site.register(Group, GroupAdmin) 
関連する問題