Модель Customuser не возвращает имя пользователя - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть пользовательская модель с

class customuser(AbstractUser):
    # additional fields    
    def __str__(self):
        return self.username

У меня есть другая модель, которая становится внешним ключом для этой модели

class bfs_support_ticket_model(models.Model):
    ticket_created_by = models.ForeignKey(customuser, on_delete = models.CASCADE)

Почему Django не отображает имя пользователя для формы, но отображает или возвращает имя пользователя везде правильно

class ticket_edit_form(ticket_create_form):

    # ticket_created_by = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control', 'readonly' : True})) # does not work in this way

    def __init__(self, *args, **kwargs):
        super(ticket_edit_form,self).__init__(*args, **kwargs)
        # self.fields['ticket_created_by'].disabled = True
        self.fields['ticket_created_by'].widget = forms.TextInput(attrs={'class' : 'form-control', 'readonly' : True}) # doesnot work in this way too

    class Meta:
        model=bfs_support_ticket_model
        exclude=['ticket_last_updated_by']

Когда форма отображается, она просто печатает customuser.id вместо customuser.username

Но когда инициализация формы не производится, она возвращаетcustomuser.username правильно

т.е. когда

class ticket_edit_form(ticket_create_form):

    def __init__(self, *args, **kwargs):
        super(ticket_edit_form,self).__init__(*args, **kwargs)
        self.fields['ticket_created_by'].disabled = True # only this line present it renders customuser.username


    class Meta:
        model=bfs_support_ticket_model
        exclude=['ticket_last_updated_by']

Пожалуйста, помогите мне, где я иду не так

Редактировать: Почему

self.fields['ticket_created_by'].disabled = True # prints username

в то время как

self.fields['ticket_created_by'].widget = forms.TextInput(attrs={'class' : 'form-control', 'readonly' : True}) # this doesn't

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Наблюдения:

Поскольку поле является Foreignkey, оно отображается как modelchoicefield, следовательно, инициализируя поле как charfield, печатается только точное значение, присутствующее в БД (в данном случае customuser.id)

Чтобы сделать его правильно, мне нужно было инициализировать его как modelchoicefield, например

ticket_created_by = forms.ModelChoiceField(queryset = customuser.objects.all(), widget = forms.Select(attrs={'class' : 'custom-select custom-select-sm mb-3', 'disabled' : True}))

Пожалуйста, посоветуйте, если это правильное решение

0 голосов
/ 07 ноября 2019
class bfs_support_ticket_model(models.Model):
    ticket_created_by = models.ForeignKey(customuser, on_delete = models.CASCADE)

    def __str__(self):
            return self.ticket_created_by.customuser.username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...