0

У меня есть общий CreateView, который отображает модель и родственную модель ForeignKey как форму с встроенными линиями. Использование подобной модели с аналогичной моделью ForeignKey в качестве источника - как я могу предварительно заполнить исходную форму и получить только правильное количество строк в зависимости от объекта из источника?Как предварительно заполнить форму и связанные с ней строки с помощью значений объекта другой модели?

Ближайший я получил решение, используя CreatWithInlinesView от django-extra-views, который дает мне пустую форму со связанной моделью в виде строк. Но как я могу получить данные из существующего объекта другой модели в эту форму с соответствующим количеством строк, необходимых объекту?

models.py

class Offers(models.Model): 
    reference = models.CharField(unique=True, max_length=10) 
    user = models.ForeignKey(User) 
    … 

class OfferDetail(models.Model): 
    offer = models.ForeignKey(Offers, related_name='offerdetails') 
    product_name = models.CharField(max_length=255) 
    … 

# where the data for prefilling comes from: 
class Orders(models.Model): 
    reference = models.CharField(unique=True, max_length=10) 
    … 

class OrderDetail(models.Model): 
    order = models.ForeignKey(Orders, related_name=‘orderdetails') 
    product_name = models.CharField(max_length=255) 
    … 

urls.py

url(r'^offer/(?P<reference>[A-Z]{9})/$', views.MyOfferView.as_view(), name=‘somename’), 

Теперь, если пользователь посещает URL offer/REFERENCE он должен видеть форму, которая создает предложение, но предварительно заполненные от объекта порядка, имеет ссылку REFERENCE

без предварительно заполненных данных от объекта заказа он работает следующим образом (используя django-extra-views) views.py

from extra_views import CreateWithInlinesView, InlineFormSet 

class DetailsInline(InlineFormSet): 
    model = OfferDetail 

class MyOfferView(CreateWithInlinesView): 
    model = Offers 
    inlines = [DetailsInline, ] 
    template_name = ‘someapp/somename.html' 
    success_url = ‘/someurl’ 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(MyOfferView, self).dispatch(*args, **kwargs) 

somename.html

<form action="" method="post"> 
    {% csrf_token %} 
    {{ form|crispy }} 
    {% for i in inlines %} 
     {{ i|crispy }} 
    {% endfor %} 
    <input type="submit" value="Submit" class="btn btn-primary"/> 
</form> 

ответ