Django:如何获取用户模型的字段而不是员工表单中的选择列表?

时间:2019-02-14 13:26:21

标签: django django-models django-forms

我正在开发应用程序,一开始就陷入困境。请在这里帮助我。

models.py

start
  

用户来自 django.contrib.auth.models

views.py

start "" "MSTest.exe" /testcontainr:C:/MyProject.dll /testsettings:C:MyParallelSettings.testsettings
start "" "MSTest.exe" etc.
start "" "MSTest.exe" etc...

employee_form.html

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=False)
    designation = models.ForeignKey(Designation, on_delete=models.CASCADE, null=False)

呈现的HTML表单 enter image description here

这是问题所在。

我希望用户模型的字段,而不是class EmployeeCreateView(LoginRequiredMixin, generic.CreateView): model = Employee fields = '__all__' success_url = reverse_lazy('core:view-employees') def form_valid(self, form): """If the form is valid, save the associated model.""" self.object = form.save(commit=False) self.object.company = self.request.user.company self.object.save() form.save_m2m() return super().form_valid(form) 选择列表,即<form action="{% url 'core:add-employees' %}" method="post"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Submit" class="bnt btn-small"> </form> User,{ {1}}等,而username应保留为选择列表

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在表单的用户字段中使用ModelChoiceField。创建一个表单类将使其变得更加容易。

请参阅https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield以供参考。

答案 1 :(得分:0)

有很多方法可以做到这一点。如果您仅将designation字段用作User的额外字段。只需将designation添加到User模型即可。 为此,您可以按以下方式使用多表继承。

class Employee(User): # change Here
    # Remove -> user = models.OneToOneField(User, on_delete=models.CASCADE, null=False)
    designation = models.ForeignKey(Designation, on_delete=models.CASCADE, null=False)

现在,您将获得想要的东西。但是请注意,这在许多情况下不是最佳用例,因为它在数据库表中创建了左外部联接。 但对于这种情况,我认为它不会影响任何事情。

要了解有关Django多表继承的更多信息,请参见:https://docs.djangoproject.com/en/2.1/topics/db/models/#multi-table-inheritance

有关扩展用户模型的其他方式,请参见:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html