python - 如何创建view django manytomany模型
问题描述
一直在尝试将我的食谱成分和成分测量保存到我的食谱数据库中。
我尝试了这样的模型:
class IngredientList(models.Model):
unit = [
('lb', 'pound'),
('oz', 'ounce'),
('tsp', 'teaspoon'),
('tbsp', 'tablespoon'),
('G', 'gallon'),
('ml', 'mililitre'),
('l', 'litre'),
('g', 'gram'),
('kg', 'kilogram'),
]
name = models.CharField(max_length=100)
image = models.ImageField(default='img.jpg')
#recipes = models.ManyToManyField('Recipe', through='RecipeList')
protein = models.FloatField()
fat = models.FloatField()
carb = models.FloatField()
units = models.CharField(max_length=10, choices=unit)
def __str__(self):
return self.name
return self.ingredient.name
class Recipe(models.Model):
name = models.CharField(max_length=100)
ingredients = models.ManyToManyField(
'IngredientList', through='RecipeList')
instructions = models.TextField(max_length=3000)
serving_size = models.IntegerField()
image = models.ImageField(default='recipe.jpg')
duration = models.IntegerField(blank=True, default=0)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('recipe-detail', kwargs={'pk': self.pk})
class RecipeList(models.Model):
recipe = models.ForeignKey(RecipeList, on_delete=models.CASCADE)
ingredients = models.ForeignKey(IngredientList, on_delete=models.CASCADE)
measurement = models.FloatField()
def __str__(self):
return self.recipe.name
在 stackoverflow 的回答中找到了这个表格:
class RecipeForm(forms.Form):
name = forms.CharField()
ingredient = forms.ModelMultipleChoiceField(IngredientList.objects.all())
instructions = forms.CharField()
count = forms.IntegerField()
serving = forms.IntegerField()
还有这个 CreateView:
class RecipeCreateView(FormView):
template_name = "recipe/shoppinglist_form.html"
form_class = RecipeForm
def form_valid(self, form):
name = form.cleaned_data['name']
ingredient = form.cleaned_data['ingredient']
instructions = form.cleaned_data['instructions']
serving = form.cleaned_data['serving']
recipe = RecipeList(name=name)
recipe.save()
ingredient_list = IngredientList.objects.filter(pk__in=ingredient)
for i in ingredient_list:
recipe.ingredients.add(i)
return render(request, 'recipe/recipe.html')
当我提交时,是的,我确实得到了配方的成分和名称。但是我无法说明每种成分的尺寸,而且其他细节也没有填写(serving_size,说明......)
请有人帮忙!
解决方案
推荐阅读
- android - 使 Android Studio 可移植(2017+ 版本)
- javascript - 未捕获的类型错误:$(...).jsGrid 不是函数
- javascript - Javascript中的冒泡排序算法
- python - 给定索引数组(i1,i2,...),获取 numpy 嵌套数组中的第 i 个元素
- python - 在没有互联网访问的情况下安装 python 模块
- sql - SQL 计数未确认的警报
- reactjs - React 如何在 Gatsby 上工作(静态生成?)
- linux - 需要一个脚本来使 vpn 在 bash 中持久化
- matlab - matlab:如何修复必须返回向量的均值/众数/中值的函数
- css - 在元素中使用定义的高度 (vh) 时,Boostrap 网格、溢出滚动和响应式布局的问题