通过此代码
from django.db import models
class Reporter(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter_name = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
class Meta:
ordering = ['headline']
不是使用ForeignKey将整个类 Reporter 放入 reporter_name 我想使用ForeignKey将first_name变成reporter_name,我问,因为我想在另一个应用程序的不同模型中使用该类。
答案 0 :(得分:0)
如果您只想存储名称,则可以执行以下操作:
from django.db import models
class Reporter(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter_name = models.CharField(max_length=100, blank=True, null=True)
def __str__(self):
return self.headline
def set_reporter_name(self, reporter_object):
self.reporter_name = reporter_object.first_name
class Meta:
ordering = ['headline']
然后您将这样保存它:
reporter = Reporter.objects.get(id=id)
article = Article.objects.create(headline=headline, pub_date=pub_date)
article.set_reporter_name(reporter)
article.save()
但是这样做,您在查询文章时将失去对ForeignKey对象的访问权限,因此您得到的只是保存的名称,而不是Reporter对象。
或者,您可以只创建一个从ForeignKey返回report_name的函数,这可能是更好的选择:
class Reporter(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
def reporter_name(self):
return self.reporter.first_name
class Meta:
ordering = ['headline']
可以像以下方式访问
article = Article.objects.get(id=id)
name = article.reporter_name()
或在模板中:
{% for article in articles.all %}
<p>{{ article.headline }} Reported by: {{ article.reporter_name }}</p>
{% endfor %}