python - 使用ForeignKey关系将数据保存到Django中的模型中

标签 python django

当我解析页面时,我无法将类别和主题保存到 Django 中的数据库中。我该怎么办?

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() 很可能不能与 models.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,因此字段 topiccategory准确引用 一个 TopicCategory 对象。

因此,您应该首先构造CategoryTopic对象,然后创建一个使用这些的Page对象,例如:

<b>category</b>, created = Category.objects.get_or_create(
    category=category_name,
    slug=slugify(category_name)
)
<b>topic</b>, created =Topic.objects.get_or_create(
    topic=topic_name,
    slug=slugify(topic_name),
    <b>category=category</b>
)
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,
    <b>category=category,
    topic=topic</b>
)

我还建议在构建 时使用 category_nametopic_name 而不是 categorytopic >CategoryTopic 对象,否则会造成困惑。

关于python - 使用ForeignKey关系将数据保存到Django中的模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433850/

相关文章:

python - 未绘制直方图

php - 如何在python中对onvif进行密码加密?

django - Django + nginx + uwsgi 无法登录

Django 管理面板内容发布错误

python - 为什么 python 不包含有序字典(默认情况下)?

python - 根据 python/pandas 数据框中单元格的文本内容选择(非索引)列

python - 使用 root 用户时无法导入模块

jquery - html属性的单引号自动替换为双引号

django - 如何在管理中使用 contenttypes 自定义模型的显示?

django - 在 generic.DetailView 中访问模型实例