我想尝试在另一个表中保存数据。有最喜欢的桌子和食物桌,我需要做的是把最喜欢的模型上的食物转移到食物桌上
如何在两个相同的表之间复制数据的简单示例:
范例
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=30)
price = models.CharField(max_length=30)
class Meta:
db_table = "food"
class Favorite(Food):
class Meta:
db_table = "favorite"
复制过程(使用
ID = 1
(进入收藏夹)
from djangoapp.models import Food, Favorite
food = Food.objects.get(id=1)
favorite = Favorite()
for attr in food._meta.fields:
if attr.verbose_name == 'ID':
continue
setattr(favorite, attr.verbose_name, getattr(food, attr.verbose_name))
favorite.save()
但是在没有特殊原因的情况下,在数据库中复制数据是非常糟糕的方式。
例如,您的食物可能会在菜单中停止,但客户仍然可以在最喜欢的数据中看到它。所以你需要删除食物和最喜欢的桌子的数据
更好的方法是创建关系表,而不是复制数据:
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=30)
price = models.CharField(max_length=30)
class Meta:
db_table = "food"
class Client(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Meta:
db_table = "client"
class Favorite(models.Model):
client_id = models.ForeignKey(Client)
food_id = models.ForeignKey(Food)
class Meta:
db_table = "favorite"
之后,您可以在收藏夹中添加新记录:
favorite = Favorite()
favorite.client_id = 1
favorite.food_id = 2
favorite.save()
这意味着
Client
具有
ID=1
补充
Food
具有
ID = 2
拥有
Favorites
在这种情况下,如果删除
食物
具有
ID=2
最爱的关系
[1,2]
也将被删除(取决于设置)。
好的,在你的情况下,将食物数据复制到收藏夹中会是这样的
def add_to_today_foods(request, pk):
food = get_object_or_404(Food, pk=pk)
favorite = Favorite()
if request.method == 'POST':
for attr in food._meta.fields:
if attr.verbose_name in ['ID', 'eaten_date']:
continue
setattr(favorite, attr.verbose_name, getattr(food, attr.verbose_name))
favorite.user = request.user
favorite.save()
return redirect('today_foods')
context = {
'food': food,
'favorite': favorite,
}
return render(request, 'base/add_to_today_foods.html', context)
ï¼ãããããã¼ã¿ãã³ãã¼ããæ¹æ³ãé常ã«ããããã§ã¯ãã¾ããã