Как мне получить данные UserCreationForm, отображаемые в админке django и в моем шаблоне?

У меня есть приложение django, которое расширяет модель пользователя и включает больше полей, которые собирают данные о новом пользователе. Пока мне удалось заставить форму работать правильно и правильно отображать поля в шаблоне.

Я также пытаюсь добавить нового пользователя в группу под названием agents, чего я каким-то образом добился, но при добавлении нового пользователя в группу пользователей agents я сталкиваюсь с проблемой в шаблонах, где я хочу отобразить всех новых пользователей. информация, хранящаяся в базе данных. Доступны обычные пользовательские поля django, например email, name, но созданные мной дополнительные поля формы не отображаются. Ниже мой код:

forms.py

class MyRegistrationForm(UserCreationForm):
COUNTIES = (('Baringo','Baringo'),
           ('Bomet','Bomet'),
           ('Bungoma', 'Bungoma'),
          )
first_name = forms.CharField(required = False)
last_name = forms.CharField(required = False)
photo = forms.ImageField()
email = forms.EmailField(required = True)
phone = forms.CharField(max_length=30)
company = forms.CharField(max_length=150)
county = forms.ChoiceField(choices=COUNTIES)
city = forms.CharField(required = True)


class Meta:
    model = User
    fields = ('username', 'email', 'password1', 'password2') 

    def clean_email(self):
        # Get the email
        email = self.cleaned_data.get('email')

        # Check to see if any users already exist with this email as a username.
        try:
            match = User.objects.get(email=email)
        except User.DoesNotExist:
            # Unable to find a user, this is fine
            return email

        # A user was found with this as a username, raise an error.
        raise forms.ValidationError('This email address is already in use.')

def save(self,commit = True):   
    user = super(MyRegistrationForm, self).save(commit = False)
    user.email = self.cleaned_data['email']
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.photo = self.cleaned_data['photo']
    user.phone = self.cleaned_data['phone']
    user.company = self.cleaned_data['company']
    user.county = self.cleaned_data['county']
    user.city = self.cleaned_data['city']

    if commit:
        user.save()

    return user

views.py

def register_user(request):
 if request.method == 'POST':
    user_form = MyRegistrationForm(request.POST, request.FILES)     # create form object
    if user_form.is_valid():
        # Create a new user object but avoid saving it yet
        new_user = user_form.save(commit=False)
        # Set the chosen password
        new_user.set_password(user_form.cleaned_data['password2'])
        # Save the User object

        new_user.save()
        my_group = Group.objects.get(name='agents') 
        my_group.user_set.add(new_user)

        return render(request, 'administration/register.html', {'user_form':user_form})

else:
    user_form = MyRegistrationForm()
return render(request,'administration/register.html',{'user_form':user_form})

Шаблон

{% for agent in agents %}
<tr>
<td>
    {% thumbnail agent.photo "50x50" crop = "center" as im %}
    <img src = "{{ im.url }}" width = "{{ im.width }}" height = "{{ im.height }}" class = "img-responsive table-img"> {% empty %}
    <img src = "{% static 'dashboard/assets/img/default-avatar.png' %}" class = "img-responsive table-img" alt = ""> {% endthumbnail %}
</td>
<td>{{ agent.first_name }} {{ agent.last_name }}</td>
<td>{{ agent.company }} </td>
<td>{{ agent.phone }}</td>
<td>{{ agent.email }}</td>
<td class = "td-actions text-right">
    <button type = "button" data-toggle = "tooltip" title = "Edit Task" class = "btn btn-info btn-simple btn-xs">
        <i class = "fa fa-edit"></i>
    </button>
    <button type = "button" data-toggle = "tooltip" title = "Delete Task" class = "btn btn-danger btn-simple btn-xs">
        <i class = "fa fa-times"></i>
    </button>
</td>
   </tr>

{% endfor %}

Вы не можете просто добавлять поля в форму, вам нужны поля для их хранения в модели.

Daniel Roseman 29.03.2018 17:55

Глядя на мой код, как я могу это сделать? Я новичок, так что я здесь очень запутался?

gathagu 29.03.2018 18:00

См. docs.djangoproject.com/en/2.0/topics/auth/customizing/…

Daniel Roseman 29.03.2018 18:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
172
0

Другие вопросы по теме