2016-11-21 4 views
0

zurückgeben Ich habe ein Modell namens Gruppe und andere Gruppenmitgliedschaft genannt. Was ich versuche, ist eine separate Zeichenfolge für eines meiner Felder in meiner Form zurückzugeben. Es wird korrekt im Frontend angezeigt, aber beim Schreiben in die Datenbank ist alles in einer Zeichenfolge. Alles, was ich versuche zu tun, ist, den Gruppenname zu erhalten und den Rest der Zeichenkette auszuschneiden, wenn ich in die Datenbank schreibe. Ich bin auf der Suche nach einem Weg, um mehr als einen Wert zurückzugeben, weil ich später Unternehmen und Abteilung von demselben Modell nehmen muss.Mehrere Werte unabhängig von Django-Modell für Modelchoicefield

My Model

# 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) 

Meine Form

# 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

Mit Blick auf den Code sieht es wie der schuldige Teil ist die '__str__' Methode. Aber um Ihre Frage klar zu machen, können Sie hinzufügen, was Sie senden, was Sie erwarten und was Sie sehen? – Aditya

+0

zum Beispiel krank senden für den Gruppennamen Western Region, aber was in die Datenbank geschrieben wird, ist ABC Pipeline INC Engineering Services Western Region. Ich muss nur westliche Region schreiben. – penguio

+0

Sehr wahrscheinlich wird der Rückgabewert der '__str__' Methode geschrieben. Wenn Sie den Wert der Methode "__str__" für die Admin-Ansicht verwenden, gibt es dafür bessere Möglichkeiten. Behalte '__str__', um einen einzelnen Wert wie' Gruppenname' zurückzugeben. Wenn du die Lösung bestätigst, werde ich dir Links zu den besseren Wegen geben, über die ich gesprochen habe (ich sage das, wenn ich nicht unnötigerweise darüber reden will) – Aditya

Antwort

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 

Zur Nutzung der @property:

from <yourapp>.models import Group 

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

Der Eigenschaftswert kann auch in django Admin verwendet werden, wie:

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

admin.site.register(Group, GroupAdmin) 
Verwandte Themen