Сделайте определенное поле формы доступным только для чтения при передаче формы в шаблон в Django 2 - PullRequest
0 голосов
/ 31 октября 2019

У меня есть форма, в которой я передаю начальное значение имени пользователя и электронной почты. В соответствии с моей логикой мне нужно, чтобы эти поля превратились в только для чтения. Есть ли способ сделать это, используя формы в функции просмотра.

models.py

class Profile(models.Model):
    STATUS_CHOICES = (
    (1, ("Permanent")),
    (2, ("Temporary")),
    (3, ("Contractor")),
    (4, ("Intern"))
    )
    GENDER_CHOICES = (
    (1, ("Male")),
    (2, ("Female")),
    (3, ("Not Specified"))
    )
    PAY_CHOICES = (
    (1, ("Fixed")),
    (2, ("Performance Based")),
    (3, ("Not Assigned")),
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    emp_type = models.IntegerField(choices=STATUS_CHOICES, default=1)
    start_date = models.DateField(default=timezone.now)
    end_date = models.DateField(null=True, blank=True)
    user_active = models.BooleanField(default=True)
    contact = models.CharField(max_length=13, blank=True)
    whatsapp = models.CharField(max_length=13, blank=True)
    gender = models.IntegerField(choices=GENDER_CHOICES, default=3)
    pay_type = models.IntegerField(choices=PAY_CHOICES, default=3)
    pay = models.IntegerField(default=0)
    avatar = models.ImageField(upload_to='users/images', default='users/images/default.jpg')
    title = models.CharField(max_length=25, null=True, blank=True)
    #manager_username = models.ForeignKey(User, blank=True, null=True, to_field='username',related_name='manager_username', on_delete=models.DO_NOTHING)

    def __str__(self):
        return self.user.username

forms.py

class SignUpForm(UserCreationForm):

    email = forms.EmailField(required=True,
                         label='Email',
                         error_messages={'exists': 'Oops'})
    class Meta:
        model = User
        fields = ("username", "first_name", "email", "password1", "password2")



class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['pay_type', 'emp_type', 'contact', 'whatsapp', 'gender', 'avatar']

views.py

def nda(request):
    context = {}
    if request.method=='POST' and request.session['email']:
        email = request.session['email']
        username = request.session['username']
        position_name = request.session['position_name']
        name = request.session['name']
        pay_type = request.session['pay_type']
        emp_type = request.session['emp_type']
        if request.POST['submit'] == 'I Agree dummy':
            context['user'] = username
            return render(request,'mainapp/nda.html',context)

        if request.POST['submit'] == 'I Agree NDA':

            context['u_form'] = SignUpForm(initial={"email": email, "username":username, "first_name" : name}) # fill it with user details
            context['p_form'] = ProfileForm(initial={"pay_type" : pay_type, "emp_type" : emp_type})
            return render(request, 'users/createAccount.html', context)
    msg="Your offer is expired!!!!"
    context['msg'] = msg
    return render(request,'mainapp/greeting.html',context)

Если вы видите, у меня есть две формы u_form (форма пользователя) и p_form (форма профиля) Я передаю обе формыс некоторыми начальными значениями, но вместе с тем я также хочу, чтобы эти поля отключались или читались только в моем шаблоне. Здесь, когда я передаю форму пользователя, я хочу сделать имя пользователя в качестве поля только для чтения (то есть пользователь не должен иметь возможности редактировать его в шаблоне).

Я хочу динамически установить поле формы как прочитанноетолько с моей точки зрения, а не в самой форме, потому что, согласно моей логике, иногда эта форма будет редактируемой, а иногда только для чтения.

Это то, что я пробовал.

username = forms.CharField(widget = forms.TextInput(attrs={'readonly':'readonly'}))

вмой файл forms.py, но он устанавливает чтение только для всей формы, где бы я ни использовался. Я хочу динамически устанавливать свойство «только для чтения» моего поля из функции просмотра. Если это невозможно, вы можете предложить мне лучший способ добиться этого. Мои разные представления хотели бы, чтобы поле имени пользователя не было доступно только для чтения. Обратите внимание, что только когда я передаю начальные значения в форму, я хочу установить свое поле только для чтения.

Примечание: Я испробовал решение, которое я получил в качестве предложения для этоговопрос а у меня ничего не получилось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...