Как я могу успешно установить связь между двумя моими моделями в моем проекте в django?Python

Программы на Python
Anonymous
Как я могу успешно установить связь между двумя моими моделями в моем проекте в django?

Сообщение Anonymous »

После того, как я создал проект с помощью flask и sqlite, я хочу сделать его с помощью Django, мне удалось добавить продукты к определенной дате
и подсчитать общее количество калорий, но я не могу показать дни с общим количеством калории на главной странице. Я показываю только те дни, которые я добавил в свою модель, но не могу показать детали по общему белку, жирам и калориям, поэтому мне нужно
на мой взгляд, решение в функции create_date
а вот подробности моего проекта
сначала моя модель

Код: Выделить всё

from django.db import models
from datetime import datetime

# Create your models here.
class Food(models.Model):
name=models.CharField(max_length=512,unique=True)
protein=models.IntegerField(null=False)
carbohydrates=models.IntegerField(null=False)
fats=models.IntegerField(null=False)
calories=models.IntegerField(null=True)
def total_calories_food(self):
total=self.protein * 4 + self.carbohydrates * 4 + self.fats * 9
self.calories=total
self.save()

def __str__(self):
return f'{self.name}'
class Dates(models.Model):
food=models.ManyToManyField(Food,through='DatesFoods')
date=models.DateField()

class DatesFoods(models.Model):
date_id=models.ForeignKey(Dates,on_delete=models.CASCADE)
food_id=models.ForeignKey(Food,on_delete=models.CASCADE)

second my forms:
from django import forms
from .models import Food, Dates

class Food_Form(forms.ModelForm):
class Meta():
model = Food
fields = ('name', 'protein', 'carbohydrates', 'fats')

class Dates_Form(forms.ModelForm):
class Meta():
model = Dates
fields = ('date',)
and finally my views

def create_date(request):

form=Dates_Form(request.POST)
dates = Dates.objects.all()
if form.is_valid():
form.save()
return render(request,'foodlist/home.html',context={'form':form,'dates':dates,
})
def add_food(request):
form=Food_Form(request.POST)
if form.is_valid():
form.save()
foods=Food.objects.all()
for d in foods:
d.total_calories_food()

return render(request,'foodlist/add_food.html',context={'form':form,'foods':foods})

def view_foods_day(request,date):

d=get_object_or_404(Dates,date=date)
print(d)
foods=Food.objects.all()
foods_day=DatesFoods.objects.filter(date_id=d.id)

protein=[]
fats=[]
carbohydrates=[]
calories=[]
for i in foods_day:

protein.append(i.food_id.protein)
fats.append(i.food_id.fats)
carbohydrates.append(i.food_id.carbohydrates)
calories.append(i.food_id.calories)

if request.method=='POST':

food_w=request.POST.get('food-select')

f=Food.objects.get(pk=food_w)

DatesFoods.objects.create(date_id=d,food_id=f)

return render(request,'foodlist/day.html', context={'foods':foods,'date':d.date,
'protein':sum(protein),
'fats':sum(fats),
'carbohydrates':sum(carbohydrates),
'calories':sum(calories),
'foods_day':foods_day})
я пытаюсь показать все дни с подробностями о белках, жирах и углеводах в граммах с общим количеством калорий.
мне удалось показать детали для конкретных день, но не на все дни

Подробнее здесь: https://stackoverflow.com/questions/790 ... fully-in-m

Вернуться в «Python»