2014-12-28 7 views
0

У меня есть модель А и модель В. Thusly:Pass экземпляра модели Джанго формы

class A(models.Model): 
    ... 

class B(models.Model): 
    a = models.ForeignKey(A) 
    ... 

Теперь пользователь делает экземпляр model A, а также на странице подробно я хочу, чтобы они могли нажать на ссылку для создания экземпляров model B, которые прилагаются к A, которые они только что сделали. Есть ли простой способ передать мне форму для model B, какой экземпляр model A (тот, на который пользователь смотрит) Я хочу его прикрепить? Нет никаких оснований для того, чтобы пользователь мог что-то знать об этом, и создание скрытого поля кажется немного взломанным, так же как и включение переменной get. Просто интересно, есть ли более плавный путь.

ответ

1

Передача такого поля, как скрытое, является нормальным решением.

class BForm(forms.ModelForm): 
    class Meta: 
     model = B 
     widgets = {'a': forms.HiddenInput()} 

И в views.py инициировать это поле экземпляра A:

form = BForm(initial={'a': a}) 

Это не хак, но стандартный вариант.

+0

Это не правильный способ осуществить то, что вы пытаетесь сделать. –

0

Теперь пользователь делает экземпляр модели А, а также на странице подробно я хочу, чтобы они могли нажать на ссылку для создания экземпляров модели B , который прилагается к А они только что сделали.

Вы ищете inline formsets:

Инлайн FormSets представляет собой небольшой слой абстракции поверх модели FormSets. Это упрощает работу со связанными объектами с помощью внешнего ключа .

пример из документации объясняет это лучше, чем я мог бы:

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    title = models.CharField(max_length=100) 

from django.forms.models import inlineformset_factory 
BookFormSet = inlineformset_factory(Author, Book) 
author = Author.objects.get(name=u'Mike Royko') 
formset = BookFormSet(instance=author) 
Смежные вопросы