【问题标题】:Django getting a model from another modelDjango 从另一个模型获取模型
【发布时间】:2017-03-13 15:48:39
【问题描述】:

我有两个模型,一个作者和一个文章。每篇文章都需要引用其作者,以便我可以在模板中访问其值。最有效的方法是什么?

class Author(models.Model):
    name = models.CharField(max_length=256)
    picture = models.CharField(max_length=256)

class Article(models.Model):
    title = models.CharField(max_length=256)
    author = #The Author model that wrote this article
    date = models.DateTimeField(default=datetime.now)
    body = models.TextField()

【问题讨论】:

  • 使用 Django 的Foreign key
  • author = models.ForeignKey(Author, verbose_name='Author')
  • 非常简单,加上近乎即时的回复。我会在 48 小时内接受答案。
  • 这是 Django 的方式 ;)

标签: python django models


【解决方案1】:

您需要为此使用Foreign Key 概念。下面是它的实现:

class Author(models.Model):
    name = models.CharField(max_length=256)
    picture = models.CharField(max_length=256)

class Article(models.Model):
    title = models.CharField(max_length=256)
    author = models.ForeignKey(Author)
    date = models.DateTimeField(default=datetime.now)
    body = models.TextField()

保存时,您需要在views.py 中执行以下操作:

if form.is_valid():
    author = Author.objects.get(name="author name")
    form.save(author=author)

希望对你有帮助...

【讨论】:

    【解决方案2】:
    class Author(models.Model):
        name = models.CharField(max_length=256)
        picture = models.CharField(max_length=256)
    
    class Article(models.Model):
        title = models.CharField(max_length=256)
        author = models.ForeignKey(Author, on_delete=models.CASCADE)
        date = models.DateTimeField(default=datetime.now)
        body = models.TextField()
    
    >>> r1 = Author(name='John',picture='johnpicture')
    >>> r1.save()
    
    >>> r2 = Author(name='John',picture='paulpicture')
    >>> r2.save()
    
    
    >>> from datetime import date
    >>> a = Article(title="Article1", body="This is a test",date=date(2017, 7, 27), author=r1)
    >>> a.save()
    >>> a.reporter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多