基础django用户模型的用户注册表格如何创建ForeignKey用户

时间:2019-05-01 23:02:53

标签: django model

我是django的新手,正在尝试建立一个具有多个用户的简单员工时间表站点。我为个人雇员设置了两个模型,一个模型具有基本django用户的ForeignKey,一个时间表模型具有雇员模型的ForeignKey。我不确定这是正确的,因为当我使用注册表格时,它只会创建基本的django用户,而不是“ Employee”,因此当我要创建新的时间表条目时,只会设置一个员工(使用admin设置)页)。具有django经验的人可以告诉我是否有更好的方法(不同的模型关系等)

from django.urls import reverse
from django.core.validators import MinValueValidator, MaxValueValidator
from django.utils import timezone
import datetime
from django.contrib.auth.models import User

class Employee(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='employee')
    payRate = models.DecimalField(max_digits=4, decimal_places=2, default=15.00, verbose_name=("Pay"))
    vacTotal = models.DecimalField(max_digits=5, decimal_places=2, default=200.00, verbose_name=("Vacation"))

# META CLASS
    class Meta:
        verbose_name = 'employee'
        verbose_name_plural = 'employees'  

    # TO STRING METHOD
    def __str__(self):
        return f"{self.user}"



class Tsheet(models.Model):   

    # CHOICES
    WORK_CHOICES= (
    ('W', 'Regular Work'),
    ('V', 'Vacation'),
    ('S', 'Sick',),
    ('C','Call In'),
)

    # DATABASE FIELDS   
    name = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='name')
    workType = models.CharField(max_length=15,choices=WORK_CHOICES)
    workDate = models.DateField(verbose_name=("Date"), default=datetime.date.today, editable=True)
    workDescription = models.CharField(max_length=200)
    workHours = models.DecimalField(max_digits=4, decimal_places=2, default=8.00, verbose_name=("Hours"))
    workReviewed= models.BooleanField(default=False)
    slug = models.SlugField(max_length=50, unique=True,
                                    help_text='Unique value for timesheet entry URL, created automatically from name.')


     # META CLASS
    class Meta:
        verbose_name = 'tsheet'
        verbose_name_plural = 'tsheets'

    # TO STRING METHOD
    def __str__(self):
        return f"{self.name} - {self.workDate} - {self.workHours} - {self.workType}"

    # SAVE METHOD    

    # ABSOLUTE URL METHOD
    def get_absolute_url(self):
        return reverse('entry-detail', kwargs={'pk': self.pk})```

1 个答案:

答案 0 :(得分:0)

解决此问题的正确方法是扩展AbstractUser并在其中添加字段:

class User(AbstractUser):
    payRate = models.DecimalField(max_digits=4, decimal_places=2, default=15.00, verbose_name=("Pay"))
    vacTotal = models.DecimalField(max_digits=5, decimal_places=2, default=200.00, verbose_name=("Vacation"))

然后您将拥有一个表,其中包含默认Django用户的所有数据以及您的特定字段