переключатели неправильно записаны в базу данных в django - PullRequest
0 голосов
/ 24 июня 2019

У меня есть форма регистрации, где пользователь должен выбрать один из 2 вариантов.

Django отображает все правильно, администратор django также имеет все в порядке, но db записывает все возможные варианты в качестве значения.

forms.py

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    class Meta:
        model = User
        fields = ['username', 'email','password1','password2']

class UserProfileForm(forms.ModelForm):
    terms_compliance = forms.BooleanField(label=mark_safe('I agree with <a href="/questions/whyname/" target="_blank">terms and conditions </a>'))
    class Meta:
        model = UserProfile
        widgets = {'role': forms.RadioSelect}
        fields = ('role','terms_compliance')
        def __init__(self):
            self.fields['terms_compliance'].initial  = True

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    role_choices = [('publisher','Publisher'), ('advertiser','Advertiser')]
    role = models.CharField(max_length=15, choices=role_choices, default=None)
    terms_compliance = models.BooleanField()
    def __str__(self):
        return self.user.username

В новом экземпляре (который user.userprofile.role_choices) мне нужно advertiser или publisher, но все, что у меня есть: [('publisher','Publisher'), ('advertiser','Advertiser')]

1 Ответ

0 голосов
/ 24 июня 2019

Если вы хотите предоставить выбор в поле базы данных.Сделайте так:

class UserProfile(models.Model):

    class RoleChoice(ChoiceEnum):
        PUBLISHER = 'Издатель'
        ADVERTISER = 'Рекламодатель'

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    role = models.CharField(max_length=15, choices=RoleChoice.choices(), default=None)
    terms_compliance = models.BooleanField()

    def __str__(self):
        return self.user

В Views.py заполните БД следующим образом.

Например:

...
choice = request.query_params.get('choice') or UserProfile.RoleChoice.PUBLISHER.value
...

Подробнее читайте здесь: https://django -mysql.readthedocs.io / ен / последний / model_fields / enum_field.html

...