ฉันกำลังสร้างเว็บไซต์บันทึกแคลอรี่โดยใช้ Django หนึ่งสร้างบัญชีและสามารถเริ่มบันทึกปริมาณแคลอรี่ที่เขาบริโภคและเผาผลาญในวันที่กำหนด จากนั้นจะแสดงว่าในวันนั้นเขาบริโภคหรือเผาผลาญแคลอรีมากขึ้น
ผู้ใช้สามารถเก็บอาหารที่กินบ่อยและออกกำลังกายบ่อยครั้งที่ เขาทำอย่างนั้นเมื่อเขาเพิ่มข้อมูล เขาสามารถใช้รายการนั้นได้
การใช้ midels ที่ผู้ใช้กำหนดสามารถเพิ่มรายการอาหารและแบบฝึกหัดได้
โมเดลอาหาร:
class Food(models.Model):
customer = models.ForeignKey(Customer, null=True, on_delete=models.CASCADE)
food_name = models.CharField(max_length=50, null=True, blank=True)
calories = models.IntegerField(null=True)
food_pic = models.ImageField(default="default_food.jpg", null=True, blank=True)
def __str__(self):
return f"{self.food_name}"
รูปแบบการออกกำลังกาย:
class Exercise(models.Model):
customer = models.ForeignKey(Customer, null=True, on_delete=models.CASCADE)
exercise_name = models.CharField(max_length=100, null=True, blank=True)
calories = models.IntegerField(null=True)
exercise_pic = models.ImageField(default="default_exercise.png", null=True, blank=True)
def __str__(self):
return f"{self.exercise_name}"
ฉันใช้สองโมเดลต่อไปนี้เพื่อจัดเก็บข้อมูลเกี่ยวกับวันที่ที่ระบุ:
DailyFood Model:
class DailyFood(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
food_name = models.ForeignKey(Food, on_delete=models.CASCADE, null=True)
quantity = models.FloatField(null=True)
date = models.DateField(auto_now_add=True, null=True)
def __str__(self):
return f"{self.customer}, {self.date}"
โมเดลการออกกำลังกายรายวัน:
class DailyExercise(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
exercise_name = models.ForeignKey(Exercise, on_delete=models.CASCADE, null=True)
quantity = models.FloatField(null=True) # number of hours done exercise
date = models.DateField(auto_now_add=True, null=True)
def __str__(self):
return f"{self.customer}, {self.date}"
ในไฟล์ views.py
def addData(request):
customer = request.user.customer
food_formset = inlineformset_factory(Customer, DailyFood, fields=('food_name', 'quantity', ))
exercise_formset = inlineformset_factory(Customer, DailyExercise, fields=('exercise_name', 'quantity', ))
f_formset = food_formset(instance=customer)
e_formset = exercise_formset(instance=customer)
if request.method == "POST":
f_formset = food_formset(request.POST, instance=customer)
e_formset = exercise_formset(request.POST, instance=customer)
if f_formset.is_valid():
mf_formset = f_formset.save(commit=False)
mf_formset.customer = customer
mf_formset.save()
else:
return HttpResponse("reached food_formset is not valid")
if e_formset.is_valid():
me_formset = e_formset.save(commit=False)
me_formset.customer = customer
me_formset.save()
return redirect('/')
else:
return HttpResponse("reached exercise_formset is not valid")
else:
foods = Food.objects.filter(customer=customer)
exercises = Exercise.objects.filter(customer=customer)
context = {'foods': foods, 'exercises': exercises, 'f_formset': f_formset, 'e_formset': e_formset}
return render(request, 'cc/add-data.html', context)
AddData html (ส่วนของแบบฟอร์ม):
<form action="" method="POST">
{% csrf_token %}
<div class="foods">
<p class="ad-accordion">Calories Consumed</p>
<div class="ad-accordion-content">
{% for form in f_formset %}
{{form}}
<br>
{% endfor %}
</div>
</div>
<div class="exercises">
<p class="ad-accordion">Calories Burnt</p>
<div class="ad-accordion-content">
{% for form in e_formset %}
{{form}}
<br>
{% endfor %}
</div>
</div>
<p class="center-button">
<button type="submit">Submit</button>
</p>
</form>
Q) When submitting the form, the form is invalid, when I print the f_formset and e_formset I get:
(ฟิลด์ที่ซ่อนอยู่ TOTAL_FORMS) ฟิลด์นี้จำเป็นต้องระบุ (ช่องที่ซ่อน INITIAL_FORMS) ช่องนี้จำเป็น input type="hidden" name="dailyfood_set-TOTAL_FORMS" id="id_dailyfood_set-TOTAL_FORMS"
input type="hidden" name="dailyfood_set-INITIAL_FORMS" id="id_dailyfood_set-INITIAL_FORMS"
input type="hidden" name="dailyfood_set-MIN_NUM_FORMS" id="id_dailyfood_set-MIN_NUM_FORMS"
input type="hidden" name="dailyfood_set-MAX_NUM_FORMS" id="id_dailyfood_set-MAX_NUM_FORMS"
เหตุใดค่าเหล่านี้จึงไม่อยู่ที่นั่น ฉันใช้ inlineformset ในโครงการอื่นและค่าเหล่านี้ถูกป้อนอัตโนมัติโดย django แต่ด้วยเหตุผลบางอย่างจึงไม่เกิดขึ้นกับค่าใดค่าหนึ่ง ??