Py学习  »  Django

如何在Django中将数据保存到不同的模型

Ema • 3 年前 • 1230 次点击  

你们所有人, 我想尝试在另一个表中保存数据。 有“最爱的桌子”和“食物桌”,我需要做的是,当用户单击“添加”按钮时,将“最爱的食物”模式转换为“食物桌”。在传输数据时,我不希望丢失从收藏夹表添加的数据,而是将其保留在收藏夹表中。

任何评论都是有帮助的,提前感谢您的时间!!


def add_to_today_foods(request, pk):
  favorite = get_object_or_404(Favorite, pk=pk)
  food = favorite
  if request.method == 'POST':
      food.user = request.user
      food.save()
      return redirect('today_foods')
  context = {
    'food': food,
    'favorite': favorite,
  }
  return render(request, 'base/add_to_today_foods.html', context)
from django.urls import path
from .views import FoodCreate, FoodUpdate, FoodDelete, FoodList, TargetCreate

from . import views

urlpatterns = [
  path('', views.foods, name='today_foods'),
  path('all_foods', FoodList.as_view(), name='all_foods'),
  path('all_foods/search/', views.food_search, name='food_search'),
  path('favorite', views.favorite, name='favorite'),
  path('favorite/delete/<int:pk>', views.favorite_delete, name='favorite_delete'),
  path('favorite/update/<int:pk>', views.favorite_update, name='favorite_update'),
  path('favorite/add_to_today_foods/<int:pk>', views.add_to_today_foods, name='add_to_today_foods'),
  path('target', TargetCreate.as_view(), name='target'),
  # path('', FoodList.as_view(), name='foods'),
  path('create/', FoodCreate.as_view(), name='food-create'),
  path('update/<int:pk>', FoodUpdate.as_view(), name='food-update'),
  path('delete/<int:pk>', FoodDelete.as_view(), name='food-delete'),

]
{% extends 'base.html' %}
{% block title %}|お気に入り登録{% endblock %}
{% block content %}


<div class="header-bar">
  <a href="{% url 'today_foods' %}">&#8592; 戻る</a>
</div>

<div class="body-container">
  <div class="body-header">
    <h1>お気に入り登録</h1>
  </div>
  <div class="notion2">
    <p>※数字は半角で打ち込んでください</p>
  </div>
  <form action="{% url 'favorite' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <button class="button" type="submit">追加</button>
  </form>

  <!-- table -->
  <div class="food-items-wrapper">
    <table>
      <tr class="table-header">
        <th class="align-left">食べもの</th>
        <th>kcal</th>
        <th>P</th>
        <th>F</th>
        <th>C</th>
        <th>カテゴリ</th>
      </tr>
      {% if favorites %}
        {% for favorite in favorites %}
          <tr>
            <td class="align-left">{{ favorite.name }}</td>
            <td>{{ favorite.kcal }}</td>
            <td>{{ favorite.protein }}</td>
            <td>{{ favorite.fat }}</td>
            <td>{{ favorite.carb }}</td>
            <td>{{ favorite.category }}</td>
            <td><a href="{% url 'favorite_update' favorite.id %}"><i class="far fa-edit"></i></a></td>
            <td><a href="{% url 'favorite_delete' favorite.id %}"><i class="far fa-trash-alt"></i></a></td>
            <td><a href="{% url 'add_to_today_foods' favorite.id %}"><i class="fas fa-plus"></i></a></td>
          </tr>
        {% endfor %}
      </table>
    {% else %}
      <td colspan="8" class="no-results">|お気に入り登録された食べものはありません。|</td>
    {% endif %}
  </div>
</div>

{% endblock %}
from django.db import models
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator
from datetime import date
# Create your models here.
FOOD_CATEGORY = (('朝食','朝食'),('昼食','昼食'), ('夕食','夕食'),('間食','間食'))
class Food(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name='ユーザー')
  category = models.CharField(max_length=200, choices=FOOD_CATEGORY, verbose_name='カテゴリー')
  name = models.CharField(max_length=200, verbose_name='名前')
  kcal = models.PositiveSmallIntegerField(verbose_name='カロリー')
  protein = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='タンパク質')
  fat = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='脂質')
  carb = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='炭水化物')
  eaten_date = models.DateField(verbose_name='食べた日付', default=date.today, help_text='※yyyy-mm-dd')
  created = models.DateTimeField(auto_now_add=True, verbose_name='作成日')
  def __str__(self):
      return self.name

class Target(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name='ユーザー')
  kcal = models.PositiveSmallIntegerField(verbose_name='カロリー')
  protein = models.DecimalField(max_digits=4, decimal_places=1, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='タンパク質')
  fat = models.DecimalField(max_digits=4, decimal_places=1, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='脂質')
  carb = models.DecimalField(max_digits=4, decimal_places=1, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='炭水化物')
  created = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='作成日')
  # 以下はadminページでの表示、正味いらん、あとエラーになる
  # def __str__(self):
  #   return self.user

class Favorite(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name='ユーザー')
  category = models.CharField(max_length=200, choices=FOOD_CATEGORY, verbose_name='カテゴリー')
  name = models.CharField(max_length=200, verbose_name='名前')
  kcal = models.PositiveSmallIntegerField(verbose_name='カロリー')
  protein = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='タンパク質')
  fat = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='脂質')
  carb = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)], verbose_name='炭水化物')
  created = models.DateTimeField(auto_now_add=True, verbose_name='作成日')
  def __str__(self):
      return self.name
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129891
 
1230 次点击  
文章 [ 2 ]  |  最新文章 3 年前