【发布时间】:2021-03-11 06:39:45
【问题描述】:
我是 django 新手,但很想学习如何使用这个框架。
想做什么:
我有一个表单,例如,它允许用户创建一个新客户端。
所以在这个表单中我有 3 个字段:
- 姓名
- 说明
- 技能
“技能”字段目前是一个文本区域,用户可以在其中复制和粘贴已存在于另一个文档 (excel) 中的列表。因此,每个元素都由分割线分隔。
我想做的是:
- 在数据库中创建用户输入的客户端
- 在数据库中,将用户输入的描述链接到客户端
- 在数据库中,将用户输入的每项技能链接到名称,以便我可以在其他功能/应用程序中相互独立地处理它们。我不希望所有技能都与客户联系为一个大集团。
所以我阅读了文档并考虑使用 ForeignKey。问题是我在使用 ForeignKey 时无法获得输入文本区域。每次我使用它时,我都会得到一个像这样的空“选择列表”......
即使我能够做到这一点,我仍然不知道如何将每个元素与其他元素分开处理..
这是我现在的代码:
模型.py
class Post(models.Model):
name = models.CharField(max_length=100, null=True)
description = models.TextField(null=True)
skills = models.TextField(null=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
views.py
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['name', 'description', 'skills']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
post_form.html
{% extends "taskflow/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Client</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Save</button>
</div>
</form>
</div>
{% endblock content %}
作为我尝试使用外键实现的示例:
models.py
class Skills(models.Model):
element = models.TextField(null=True)
class Post(models.Model):
name = models.CharField(max_length=100, null=True)
description = models.TextField(null=True)
skills = models.ForeignKey(Skills, on_delete=models.CASCADE)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
views.py
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['name', 'description', 'skills']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
如果在views.py 中,而不是调用'skills' 我调用'element',我得到一个错误,说'element' 是未定义的。 我认为使用 ForeignKey 会将技能中包含的“元素”字段包含在 Post 中包含的“技能”字段中。所以据我了解并非如此。
我做错了什么?
欢迎提供任何信息和提示。
非常感谢。
【问题讨论】:
标签: python django forms foreign-keys many-to-one