Django вопрос о лучших практиках (от новичка) - PullRequest
1 голос
/ 08 мая 2020

Я хочу создать модель на Django, которая может описывать сад с рядами для растений. Каждому растению нужно место для роста, и я хочу описать, сколько растений поместится в ряд - я немного не знаю, как лучше всего описать это в Django:

from django.db import models
from django.contrib.auth.models import User

class Plant(models.Model):
    name = models.CharField('Plantname', max_length=120)
    size = models.PositiveIntegerField("area around plant in cm")
    qty = models.PositiveIntegerField("number of plants")
    color = models.CharField("color of blossom", max_length=20)

class Patch(models.Model):
    FERT = "fertilized"
    BIO = "biological"
    METHODS = ((FERT, "Fertilized"), (BIO, "Biological"))

    type = models.Charfield("kind of patch", max_length=20, choices=METHODS)
    qty = models.PositiveIntegerField("number of patches")
    size = models.PositiveIntegerField("length of patch in cm")


class task(models.Model):
    task_id = models.PositiveIntegerField('Task ID')
    person = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
    patches = models.ManyToManyField(Patch)
    plants = models.ManyToManyField(Plant)

Теперь я создаю :

  1. два примера патча длиной 300 и 400 см
  2. два примера растений длиной 20 и 15 см

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

Итак, когда создается задача, мне нужно:

  1. спросить размер и количество патчей
  2. Выбрать тип растения
  3. Рассчитать макс. возможное количество растений
  4. спросите количество растений и установите его максимальное (растения) if number > max(plants)
  5. создайте задание с общим количеством участков и растений

может кто-нибудь, пожалуйста, помогите мне :)

1 Ответ

1 голос
/ 08 мая 2020

Ваши модели выглядят нормально. Вам нужно будет запросить ввод пользователя, используя Django Forms. Вероятно, вы можете использовать ModelForm для своей модели Task, а затем переопределить метод save (), чтобы добавить свой бизнес-лог c.

Кроме того, вы должны переименовать class task в class Task (или еще лучше class FarmingTask, поскольку 'задача' является ключевым словом, используемым в нескольких программных библиотеках / языках и может конфликтовать позже.)

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