Вы должны сначала изучить официально рекомендованный способ расширения модели User, , как видно из документов , что, как мне кажется, взято непосредственно из личного блога руководителя проекта по теме, (Фактическая статья в блоге довольно старая, сейчас)
Что касается вашей реальной проблемы с формами, взгляните на собственное приложение менеджера проекта django-profile , предназначенное для повторного использования, и посмотрите, решает ли просмотр кода проблему. В частности эти функции и представления , в которых они используются.
Отредактировано для добавления:
Я немного разбирался в этом (так как мне нужно было сделать это самому). Кажется, что-то вроде этого будет достаточно:
# apps.profiles.models
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
...
birth_date = models.DateField(blank=True, null=True)
joined = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'user profile'
verbose_name_plural = 'user profiles'
db_table = 'user_profiles'
class Address(models.Model):
user = models.ForeignKey(UserProfile)
...
# apps.profiles.forms
from django import forms
from django.forms import ModelForm
from django.forms.models import inlineformset_factory
from django.contrib.auth.models import User
from apps.profiles.models import UserProfile, Address
class UserForm(ModelForm):
class Meta:
model = User
...
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
...
AddressFormSet = inlineformset_factory(UserProfile, Address)
Я использовал «...» для обрезки содержимого в приведенном выше коде. Я еще не проверял это, но, просматривая примеры и документацию к формам, я считаю, что это правильно.
Примечание. Я поместил FK из модели Address в UserProfile, а не наоборот, как в вашем вопросе. Я полагаю, что для правильной работы встроенным наборам форм это необходимо.
Тогда, конечно, в ваших представлениях и шаблонах вы будете обрабатывать UserForm, UserProfileForm и AddressFormSet по отдельности, но все они могут быть вставлены в одну форму.