【问题标题】:Django Model field to populate another fieldDjango 模型字段填充另一个字段
【发布时间】:2021-10-05 03:59:28
【问题描述】:

我又回来了,我在这个问题上已经超过 48 小时了,仍然找不到对此的回应。

我有这个模型。

Position 表有 Site Engineer、Site Manager、HVAC Engineer 等

每个工程师只有一个职位,我希望仅当创建的工程师具有职位站点经理时才填充经理字段。如果创建了工程师,则经理字段将是具有站点经理职位的工程师的下拉列表。

from django.db import models

class Position(models.Model):
    name = models.CharField(max_length=100, default='Site Engineer')

    def __str__(self):
        return self.name


class Engineers(models.Model):

    region = (
       ('SS', 'South-South'), ('SW', 'South-West'), ('SE', 'South-East'),
       ('NE', 'North-East'), ('NW', 'North-West'), ('NC', 'North-Central'),
    )

    firstname = models.CharField(max_length=20)
    lastname = models.CharField(max_length=20)
    email = models.EmailField(max_length=50)
    username = models.CharField(max_length=20, default='Leave Blank', unique=True)
    phone = models.CharField(max_length=11)
    position = models.ForeignKey(Position, on_delete=models.DO_NOTHING)
    workarea = models.CharField(max_length=20, choices=region)
    manager = models.CharField(verbose_name='Site Manager', max_length=80, default=None)


    def save(self, *args, **kwargs):
        self.username = self.firstname +'.'+self.lastname
        self.manager = self.firstname +' '+self.lastname

        super(Engineers, self).save(*args, **kwargs)
            
    def __str__(self):
        return self.firstname + ' ' + self.lastname

此代码仅使用工程师的姓名填写经理字段,即使他们不是现场经理。

请帮忙

【问题讨论】:

  • 为什么需要经理字段作为下拉菜单?您可以制作另一个表格,其中将显示经理列表。此外,您可以在模板中查看站点管理员列表,而无需更改管理员字段。您使数据库变得复杂。让它变得简单。
  • 谢谢@Jafoor,目的是让它变得简单。请帮助提出任何改进建议。我曾想过创建一个 Site_Manager 表,但仍然不知道该找谁。
  • 你可以给我你的 git repo。在看到您的项目详细信息后,我将为您设计一个数据库。

标签: python django django-models django-templates web-development-server


【解决方案1】:

我可以通过将经理字段编辑为:

manager = models.ForeignKey('self' , on_delete=models.PROTECT, blank=True, db_index=False, related_name='Manager')

在这里看到https://docs.djangoproject.com/en/3.2/ref/models/fields/#module-django.db.models.fields.related

请务必将 db_index 设置为 false。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2014-12-25
    • 2021-09-16
    • 2013-06-25
    相关资源
    最近更新 更多