Как форма регистрации пользователя для базовой модели пользователя django может создать пользователя ForeignKey - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в django и пытаюсь настроить простой сайт учета рабочего времени для сотрудников, который имеет несколько пользователей.Я установил две модели: одну для отдельного сотрудника, у которого есть ForeignKey базового пользователя django, и модель расписания, в которой есть ForeignKey модели сотрудника.Я не уверен, что это правильно, потому что когда я использую свою регистрационную форму, она просто создает базового пользователя django, а не «Сотрудника», поэтому, когда я хочу создать новую запись в расписании, настраивается только один сотрудник (настроенный с помощью администраторастраница).Может ли кто-то с большим опытом работы с 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 голосов
/ 02 мая 2019

Правильный способ сделать это - расширить 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 по умолчанию, а также ваши конкретные поля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...