У меня есть модель, называемая группой, а другая называется членом группы. То, что я пытаюсь сделать, это вернуть отдельную строку для одного из моих полей в моей форме. Он отображается правильно в интерфейсе, но при записи в базу данных все в одной строке. Все, что я пытаюсь сделать, это получить имя_группы и вырезать остальную часть строки при записи в базу данных. Я стремлюсь к способу вернуть более одного значения, потому что мне нужно захватить компанию и отдел позже из той же модели.Возвращение нескольких значений независимо от модели django для 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)
Моя форма
# 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')
Глядя на код, похоже, что виновная часть - это метод '__str__'. Но чтобы ваш вопрос был ясно, вы можете добавить то, что вы отправляете, что вы ожидаете и что видите? – Aditya
, например, отправить сообщение для названия группы Western Region, но то, что записывается в базу данных, - это ABC Pipeline INC Engineering Services Western Region. Мне просто нужно написать западный регион. – penguio
Очень вероятно, что возвращаемое значение метода '__str__' становится написанным. Если вы используете значение метода '__str__' для просмотра admin, есть лучшие способы сделать это. Сохраните '__str__', чтобы вернуть одно значение, например' group_name'. Если вы подтвердите решение, я дам вам ссылки на лучшие способы, о которых я говорил (я говорю, если, потому что я не хочу излишне говорить об этом :)) – Aditya