如何更新 Django models.py 中的外键字段?

Asi*_*sif 6 python sqlite django

这是来源: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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ast*_*and 13

首先获取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()
Run Code Online (Sandbox Code Playgroud)


ama*_*ets 7

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

b = Blog.objects.get(pk=1)
Entry.objects.filter(pk=17).update(blog=b)
Run Code Online (Sandbox Code Playgroud)
  1. 需要选择要更新的行/行
  2. 使用功能 update

  • 为什么要使用 `pk=1` 和 `pk=17`。我认为这不会帮助人们理解他想做什么。 (2认同)