У меня есть приложение 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 %}
Глядя на мой код, как я могу это сделать? Я новичок, так что я здесь очень запутался?
См. docs.djangoproject.com/en/2.0/topics/auth/customizing/…






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