【问题标题】:How to update a foreign key field in Django models.py?如何更新 Django models.py 中的外键字段?
【发布时间】:2017-09-20 05:54:35
【问题描述】:

以下是来源: https://docs.djangoproject.com/en/1.8/topics/db/queries/

一开始,我们看models.py字段:

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):              # __unicode__ on Python 2
        return self.headline

这就是如何创建博客类型的行或对象:

>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()

我的问题是如何使用我在博客类中创建的条目来更新条目对象的博客列/属性(存储与博客相关的外键)?

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    首先获取Blog对象,然后将其传递给Entry

    b=Blog.objects.get(name='Beatles Blog', tagline='All the latest Beatles news.')
    
    e=Entry(blog=b,headline='some headline',body_text='text here',....)
    e.save()
    

    【讨论】:

    • @Asif,你试过这个吗?它对你有用吗?如果有任何问题,请告诉我。
    • 嗯,确实如此。谢谢!如果您喜欢简洁的表达方式,您可以编写以下行来创建行并保存它: e=Entry.objects.create(blog=b,headline='some heading',body_text='text here',... .)
    • @Asif,如果您只需要在新记录出现或更新时创建,也可以使用update_or_create
    • @Asif,如果我的解决方案对您有帮助,请选择答案,非常感谢大家的合作。
    • 这对我有帮助,谢谢!
    【解决方案2】:

    您可以使用documentation 的解决方案。或简短回答:

    b = Blog.objects.get(pk=1)
    Entry.objects.filter(pk=17).update(blog=b)
    
    1. 需要选择要更新的行/行
    2. 使用函数update

    【讨论】:

    • 你为什么选择pk=1pk=17。我认为这不会帮助这个人理解他想做什么。
    • @AstikAn 只是一个例子
    猜你喜欢
    • 2011-11-16
    • 2011-04-10
    • 1970-01-01
    • 2018-11-07
    • 2019-01-11
    • 1970-01-01
    • 2013-01-31
    • 2020-10-20
    • 2014-08-13
    相关资源
    最近更新 更多