Найти - Пользователи
Полная версия: Одна форма от нескольких моделей
Начало » Django » Одна форма от нескольких моделей
1
Mutagena
Подскажите, как сделать одну форму с полями из двух моделей.
Я использую стандартную модель User и расширение UserProfile:
class UserProfile(models.Model):
user = models.OneToOneField(User)

avatar = models.ImageField('Фотография', upload_to = 'users/', null=True)
description = models.CharField('О себе', max_length = 300, blank = True)
telephone = models.CharField('Телефон', max_length = 11, blank = True)
city = models.ManyToManyField(City)
street_house = models.CharField('Улица, дом', max_length = 35, blank = True)
flat = models.PositiveIntegerField('Квартира', null=True)

def __unicode__(self):
return self.user
Необходимо, чтобы в одной форме на странице редактирования профиля юзера были и некоторые поля из User и из UserProfile.
Norecces
Ну можно например замиксовать две модели,
и по этой замиксованной модели построить форму.
Mutagena
Norecces, пример пожалуйста.
Norecces
class Manufacturer(models.Model):
# ...

class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
# ...
http://docs.djangoproject.com/en/1.2/topics/db/models/#topics-db-models

там все подробно описано.

и я не уверен что это самый простой способ, если поискать
то наверняка можно найти более простой и более “джанговский” способ.
Arceny
Задача. Создание HTML формы, работающей с несколькими моделями.

#in forms.py
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ["username", "email"]

class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile

#in views.py
def add_user(request):
...
if request.method == "POST":
uform = UserForm(data = request.POST)
pform = UserProfileForm(data = request.POST)
if uform.is_valid() and pform.is_valid():
user = uform.save()
profile = pform.save(commit = False)
profile.user = user
profile.save()
....
...

#in template
<form method="post">
{{ uform.as_p }}
{{ pform.as_p }}
<input type="submit" ...>
</form>
http://habrahabr.ru/blogs/django/81632/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB