解析页面时,我无法将类别和主题保存到Django中的DB。我该怎么办?
class Category(models.Model):
category = models.CharField(max_length=50)
slug = models.CharField(max_length=60, unique=True)
class Topic(models.Model):
topic = models.CharField(max_length=50)
slug = models.CharField(max_length=60, unique=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
class Page(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
...
我写了它,但是不起作用。很可能add()无法与model.ForeignKey一起使用,对吗?如果是,该怎么办?
from django.template.defaultfilters import slugify
...
page = {
'datetime': datetime,
'title':title,
'slug':slug,
'short_text':short_text,
'text':text,
'image':image_name,
'img_source':img_source,
'page_source':page_source,
}
try:
page = Page.objects.create(**page)
except Exception as e:
print(e, type(e))
category = {'category':category, 'slug':slugify(category)}
category, created = Topic.objects.get_or_create(**category)
page.category.add(category)
topic = {'topic':topic, 'slug':slugify(topic)}
topic, created = Topic.objects.get_or_create(**topic)
page.topic.add(topic)
因为它是(非空)ForeignKey
,所以字段topic
和category
应该引用精确地一个Topic
和Category
对象。
因此,您应该first构造Category
和Topic
对象,然后创建使用这些对象的Page
,例如:
category, created = Category.objects.get_or_create(
category=category_name,
slug=slugify(category_name)
)
topic, created =Topic.objects.get_or_create(
topic=topic_name,
slug=slugify(topic_name),
category=category
)
page = Page.objects.create(
datetime=datetime,
title=title,
slug=slug,
short_text=short_text,
text=text,
image=image_name,
img_source=img_source,
page_source=page_source,
category=category,
topic=topic
)
我进一步建议在构造category_name
和topic_name
对象时,在category
和topic
上使用Category
和Topic
,否则会引起混淆。