Как сформировать данные для выбора? - PullRequest
2 голосов
/ 29 апреля 2019

Есть модель Provider.Он имеет поле role, которое имеет две опции: Individual и Organization.Есть summary поле и organization поле.

Необходимо, чтобы в form (в шаблоне) , в select данные отображались следующим образом: если запись связана с Individual, затем summqry + user, а если с Organization, то формы Organization title.

models.py

ROLE_INDIVIDUAL = 'individual'
ROLE_ORGANIZATION = 'organization'

ROLE_CHOICES = (
    (ROLE_INDIVIDUAL, _('Individual')),
    (ROLE_ORGANIZATION, _('Organization'))
    )

class Provider(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    role = models.CharField(max_length=255, choices=ROLE_CHOICES, default=ROLE_INDIVIDUAL)
    summary = models.CharField(max_length=255, default='')
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)

.py

class ProductCreateForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = (..., 'on_behalf', ...)

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('initial').get('request')
        super(ProductCreateForm, self).__init__(*args, **kwargs)
        self.fields['on_behalf'] = ModelChoiceField(queryset=Provider.objects.filter(user=user.id))

1 Ответ

2 голосов
/ 29 апреля 2019

Вы должны определить метод __str__ в провайдере, чтобы вернуть нужную строку.

class Provider(models.Model):
    ...
    def __str__(self):
        if self.role == ROLE_INDIVIDUAL:
            return '{} + {}'.format(self.summary, self.user)
        else:
            return self.organization.title
...