【问题标题】:Django: Updating foreign_keysDjango:更新外键
【发布时间】:2018-04-13 15:50:16
【问题描述】:

在我的项目流程中,我首先在 Orders 中创建了一个数据库条目。此时,foreign_key transaction_profile 保持为空。稍后在我的 checkout_page 视图中,创建了 transaction_profile。

transaction_profile.save() 发生后,我想将新创建的 Transaction_Profile 与 Order.objects.filter(order_id=request.session['order_id']) 的 Order 模型条目连接起来。

我现在真的很难完成这项工作。这里有人如何帮助我找到正确的轨道?

结帐>views.py

def checkout_page(request):

    if request.POST:
        transaction_profile = TransactionProfileModelForm(request.POST)
        if transaction_profile.is_valid():
            transaction_profile.save()

            o = Order.objects.filter(order_id=request.session['order_id'])
            #if qs.count() == 1:
            o.transaction_profile.add(transaction_profile)

    else:
            transaction_profile = TransactionProfileModelForm()

        context = {
            'transaction_profile': transaction_profile,
        }
[...]

交易 > 模型.py

class TransactionProfile(models.Model):
    email           = models.EmailField()
    address_line_1  = models.CharField(max_length=120)
    address_line_2  = models.CharField(max_length=120, null=True, blank=True)
    city            = models.CharField(max_length=120)
    country         = models.CharField(max_length=120)
    state           = models.CharField(max_length=120)
    postal_code     = models.CharField(max_length=120)
    update          = models.DateTimeField(auto_now=True)
    timestamp       = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

订单>models.py

class Order(models.Model):
    order_id                = models.CharField(max_length=10, unique=True)
    updated                 = models.DateTimeField(auto_now=True)
    timestamp               = models.DateTimeField(auto_now_add=True)
    transaction_profile     = models.ForeignKey(TransactionProfile, blank=True, null=True, on_delete=models.CASCADE)

【问题讨论】:

    标签: django foreign-keys models


    【解决方案1】:

    你必须先保存实例并将其分配给Order对象:

    if request.POST:
        transaction_profile = TransactionProfileModelForm(request.POST)
        if transaction_profile.is_valid():
            instance = transaction_profile.save(commit=False)
            instance.save()
    
            o = Order.objects.get(order_id=request.session['order_id'])
            o.transaction_profile = instance
            o.save()
    

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 2011-11-16
      • 2016-01-09
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2019-06-22
      相关资源
      最近更新 更多