Как использовать django обычное наследование в моделях и формах - PullRequest
4 голосов
/ 04 апреля 2020

Как определить помощников для Class Event, чтобы я мог интегрировать их в EventForm и использовать их в event_new(request). «Помощники» должны использоваться в формах, представлениях, шаблонах, но не go в базе данных. Речь идет о показе существующих событий и автоматическом создании новых событий из-за различных аспектов

models.py

class Event_helper(object):
   number = models.PositiveSmallIntegerField()

class Event(Event_helper, models.Model):
   event_date = models.DateTimeField(auto_now=False, null=True, blank=True)

forms.py

class EventForm(forms.Event):
    class Meta:
        model = Event 
        fields = ('event_date', 'number')

views.py

def event_new(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save(commit=False)
            ... generate events ...
            event.save()


Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Самое простое решение, которое я мог найти, было без надлежащего наследования. Но в представлениях можно сделать два разных запроса

models.py

class Event(models.Model):
   event_date = models.DateTimeField(auto_now=False, null=True, blank=True)

forms.py

class EventForm(forms.ModelForm):
    number = forms.IntegerField(initial = 1)

    class Meta:
        model = Event
        fields = ('event_date',)

views.py

def event_new(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            number = int(request.POST['number'])
            event = form.save(commit=False)
            print(number)
            print(event)  
            ... generate events ...
            event.save()
0 голосов
/ 07 апреля 2020

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

    class Event(models.Model):
        event_date = models.DateTimeField(auto_now=False, null=True, blank=True)

        @property
        def number(self):
            return `some value that you calculated`

    class EventForm(ModelForm):
        number = forms.IntegerField()

        class Meta:
            model = Event 
            fields = ('event_date',)

        def __init__(self, *args, **kwargs):
            instance = kwargs.get("instance", None)
            if instance:
                kwargs["initial"] = {"number": `some initial value you want`, }
            super().__init__(*args, **kwargs)
    def event_new(request):
        if request.method == "POST":
            form = EventForm(request.POST)
            if form.is_valid():
                event = form.save(commit=False)
                ... generate events ...
                ... use event.number in the way you want...
                event.save()

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