如何通过一次 post,保存到 2 个表? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myung
V2EX    Django

如何通过一次 post,保存到 2 个表?

  •  1
     
  •   myung 2018-05-10 22:41:09 +08:00 4092 次点击
    这是一个创建于 2784 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我通过爬虫获取到了商品详情信息,想通过 post 提交保存到我的商品表,并且在保存数据的同时将其放入到购物车里,购物车里的商品信息是通过与商品表关联获取。应该怎么实现呢?

    新手求指点。。

    # 购物车模型 from django.db import models from goods.models import Goods class Cart(models.Model): cart_id = models.CharField(max_length=250, blank=True, verbose_name="购物车 id") add_time = models.DateField(auto_now_add=True, verbose_name="创建时间") class Meta: db_table = "Cart" ordering = ['add_time'] verbose_name ='购物车' verbose_name_plural = verbose_name def __str__(self): return self.cart_id class CartItem(models.Model): goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品名") cart = models.ForeignKey(Cart, on_delete=models.CASCADE, verbose_name="购物车 id") quantity = models.IntegerField(verbose_name="商品数量") active = models.BooleanField(default=True) class Meta: db_table = "CartItem" verbose_name = "购物车商品" verbose_name_plural = verbose_name def sub_total(self): return self.goods.good_price * self.quantity def __str__(self): return self.goods 
    # from 提交保存到商品表 def post(self, request): user = UserProfile.objects.get(username=request.user) new_goods = Goods(goods_user=user) goods_from = goodsForm(request.POST, instance=new_goods) if goods_from.is_valid(): goods_from.save() return redirect('cart:cart_detail') else: goods_from =goodsForm() return redirect('index') 
    # 添加到购物车 def add_cart(request, goods_id): goods = Goods.object.get(id=goods_id) try: cart = Cart.object.get(cart_id=_cart_id) except Cart.DoseNotExist: cart = Cart.object.create( cart_id = _cart_id(request) ) cart.save(), try: cart_item = CartItem.object.get(goods=goods, cart=cart) cart_item.quantity +=1 cart_item.save() except CartItem.DoseNotExist: cart_item = CartItem.object.create( goods = goods, quantity = 1, cart = cart ) cart_item.save() return redirect('cart:cart_detail') 
    第 1 条附言    2018-05-11 00:17:12 +08:00

    @virusdefender

    ''' def post(self, request): user = UserProfile.objects.get(username=request.user) new_goods = Goods(goods_user=user) goods_from = DaikouForm(request.POST, instance=new_goods) if goods_from.is_valid(): goods_from.save() goods = Goods.object.get(id=new_goods.id) try: cart = Cart.object.get(cart_id=_cart_id) except Cart.DoseNotExist: cart = Cart.object.create( cart_id = _cart_id(request) ) cart.save(), try: cart_item = CartItem.object.get(goods=goods, cart=cart) cart_item.quantity += 1 cart_item.save() except CartItem.DoseNotExist: cart_item = CartItem.object.create( goods = goods, quantity = 1, cart = cart ) cart_item.save() return redirect('cart:cart_detail') else: goods_from =DaikouForm() return redirect('index') '''

    第 2 条附言    2018-05-11 00:22:16 +08:00
     def post(self, request): user = UserProfile.objects.get(username=request.user) new_goods = Goods(goods_user=user) goods_from = DaikouForm(request.POST, instance=new_goods) if goods_from.is_valid(): goods_from.save() goods = Goods.object.get(id=new_goods.id) try: cart = Cart.object.get(cart_id=_cart_id) except Cart.DoseNotExist: cart = Cart.object.create( cart_id = _cart_id(request) ) cart.save(), try: cart_item = CartItem.object.get(goods=goods, cart=cart) cart_item.quantity += 1 cart_item.save() except CartItem.DoseNotExist: cart_item = CartItem.object.create( goods = goods, quantity = 1, cart = cart ) cart_item.save() return redirect('cart:cart_detail') else: goods_from =DaikouForm() return redirect('index') 
    13 条回复    2018-05-11 01:00:08 +08:00
    Kilerd
        1
    Kilerd  
       2018-05-10 23:05:15 +08:00
    抽象出 Service 层
    myung
        2
    myung  
    OP
       2018-05-10 23:07:24 +08:00
    @Kilerd 能稍微具体些吗。。。我是新手
    virusdefender
        3
    virusdefender  
       2018-05-11 00:02:18 +08:00
    没懂你是什么问题,合并一下两个函数的代码不就可以了么
    myung
        4
    myung  
    OP
       2018-05-11 00:05:42 +08:00
    @virusdefender。。我合并了 但是没反应。。
    myung
        5
    myung  
    OP
       2018-05-11 00:08:51 +08:00
    @virusdefender 合并 post 提交 俩函数都不起作用了。。。
    virusdefender
        6
    virusdefender  
       2018-05-11 00:10:15 +08:00
    @myung #5 那就是你写错了,贴一下代码看看
    myung
        7
    myung  
    OP
       2018-05-11 00:11:10 +08:00
    @virusdefender

    '''
    def post(self, request):
    user = UserProfile.objects.get(username=request.user)
    new_goods = Goods(goods_user=user)
    goods_from = DaikouForm(request.POST, instance=new_goods)
    if goods_from.is_valid():
    goods_from.save()
    goods = Goods.object.get(id=new_goods.id)
    try:
    cart = Cart.object.get(cart_id=_cart_id)
    except Cart.DoseNotExist:
    cart = Cart.object.create(
    cart_id = _cart_id(request)
    )
    cart.save(),
    try:
    cart_item = CartItem.object.get(goods=goods, cart=cart)
    cart_item.quantity += 1
    cart_item.save()
    except CartItem.DoseNotExist:
    cart_item = CartItem.object.create(
    goods = goods,
    quantity = 1,
    cart = cart
    )
    cart_item.save()
    return redirect('cart:cart_detail')
    else:
    goods_from =DaikouForm()
    return redirect('index')
    '''
    myung
        8
    myung  
    OP
       2018-05-11 00:12:16 +08:00
    @virusdefender 就是直接把 添加到购物那个函数内容 贴到保存数据库的后面了
    myung
        9
    myung  
    OP
       2018-05-11 00:21:38 +08:00
    ```
    def post(self, request):
    user = UserProfile.objects.get(username=request.user)
    new_goods = Goods(goods_user=user)
    goods_from = DaikouForm(request.POST, instance=new_goods)
    if goods_from.is_valid():
    goods_from.save()
    goods = Goods.object.get(id=new_goods.id)
    try:
    cart = Cart.object.get(cart_id=_cart_id)
    except Cart.DoseNotExist:
    cart = Cart.object.create(
    cart_id = _cart_id(request)
    )
    cart.save(),
    try:
    cart_item = CartItem.object.get(goods=goods, cart=cart)
    cart_item.quantity += 1
    cart_item.save()
    except CartItem.DoseNotExist:
    cart_item = CartItem.object.create(
    goods = goods,
    quantity = 1,
    cart = cart
    )
    cart_item.save()
    return redirect('cart:cart_detail')
    else:
    goods_from =DaikouForm()
    return redirect('index')
    ```
    myung
        10
    myung  
    OP
       2018-05-11 00:23:18 +08:00
    @virusdefender 贴到第 2 个附言了。。。贴错 3 次。
    WordTian
        11
    WordTian  
       2018-05-11 00:45:02 +08:00 via Android
    python 不太熟,反正代码没看出问题,你发 post 的 url 接口是对应你改完的方法吗
    myung
        12
    myung  
    OP
       2018-05-11 00:50:59 +08:00
    @WordTian 是的
    myung
        13
    myung  
    OP
       2018-05-11 01:00:08 +08:00
    @WordTian 单独用都好用 合并到一起就都不好使了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3210 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSIO: 3.9.8.5 25ms UTC 10:56 PVG 18:56 LAX 02:56 JFK 05:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86