Tôi đã đặt cùng một biểu mẫu để lưu công thức. Nó sử dụng một biểu mẫu và một formset nội tuyến. Tôi có người dùng với các tập tin văn bản có chứa công thức nấu ăn và họ muốn cắt và dán dữ liệu để làm cho mục nhập dễ dàng hơn. Tôi đã làm việc ra làm thế nào để cư các phần hình thức sau khi xử lý đầu vào văn bản thô nhưng tôi không thể tìm ra cách để điền vào formset nội tuyến.Dữ liệu ban đầu cho các hình thức nội tuyến Django
Có vẻ như giải pháp gần như được viết ở đây: http://code.djangoproject.com/ticket/12213 nhưng tôi không thể ghép các mảnh lại với nhau.
mô hình của tôi:
#models.py
from django.db import models
class Ingredient(models.Model):
title = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class Recipe(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
directions = models.TextField()
class Meta:
ordering = ['title']
def __unicode__(self):
return self.id
def get_absolute_url(self):
return "/recipes/%s/" % self.id
class UnitOfMeasure(models.Model):
title = models.CharField(max_length=10, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class RecipeIngredient(models.Model):
quantity = models.DecimalField(max_digits=5, decimal_places=3)
unit_of_measure = models.ForeignKey(UnitOfMeasure)
ingredient = models.ForeignKey(Ingredient)
recipe = models.ForeignKey(Recipe)
def __unicode__(self):
return self.id
Dạng thức được tạo ra bằng cách sử dụng ModelForm:
class AddRecipeForm(ModelForm):
class Meta:
model = Recipe
extra = 0
Và mã có liên quan trong giao diện (gọi để phân tích ra các hình thức đầu vào được xóa):
def raw_text(request):
if request.method == 'POST':
...
form_data = {'title': title,
'description': description,
'directions': directions,
}
form = AddRecipeForm(form_data)
#the count variable represents the number of RecipeIngredients
FormSet = inlineformset_factory(Recipe, RecipeIngredient,
extra=count, can_delete=False)
formset = FormSet()
return render_to_response('recipes/form_recipe.html', {
'form': form,
'formset': formset,
})
else:
pass
return render_to_response('recipes/form_raw_text.html', {})
Với FormSet() trống như trên, tôi có thể khởi chạy thành công trang. Tôi đã thử một vài cách để nuôi formset số lượng, unit_of_measure và các thành phần tôi đã xác định bao gồm:
- thiết lập dữ liệu ban đầu nhưng điều đó không làm việc cho formsets inline
- đi qua một từ điển, nhưng điều đó tạo quản lý lỗi hình thức
- chơi xung quanh với init nhưng tôi một chút ra khỏi sâu của tôi ở đó
Bất kỳ lời đề nghị đánh giá cao rất nhiều.
Lời khuyên tuyệt vời Aram, cảm ơn bạn rất nhiều. Tôi sẽ thử các tùy chọn hiện nay. Tôi đặc biệt thích có một lựa chọn dễ dàng ... – Sinidex
Sử dụng zip chắc chắn hoạt động và tôi có thể xác nhận rằng lưu các hình thức trong thời trang thông thường hoạt động là tốt. Tôi vẫn cần phải xây dựng ra phù hợp với văn bản phân tích cú pháp để các thành phần có liên quan và các đơn vị của đối tượng đo như bạn chỉ ra, nhưng tôi nghĩ rằng nên được quản lý. Giải pháp tuyệt vời. – Sinidex
Có có và có. Đây là một giải pháp tuyệt vời! Tôi đã có một thời gian khó khăn để đạt được điều này. Tôi đã lần đầu tiên tìm hiểu làm thế nào để xây dựng mỗi hình thức trong bộ này. Sau đó, nhận ra * ban đầu * làm việc, trên một hình thức (không formset) cơ sở. Trong zip chúng tôi tin tưởng ™ – Flowpoke