将子类别的模型选择字段从表单保存到Django数据库中

时间:2019-06-09 23:52:22

标签: python django

我有两个app maxes和training。我在maxes应用程序及其查询健身应用程序以其形式提取所有举升机名称的表单中将多选字段细分为子类。这样,我不必两次输入数据,它就可以工作,并且我可以得到锻炼应用程序中放置的所有举重的列表。但是,当我去保存数据时,它会输入锻炼名称。我相信这是因为我已经在models.py中用self声明了锻炼名称。如何将锻炼表中的举升机名称保存到我的maxes数据库中

我已经尝试将sublcass字段添加到.save()中。我也改为原始形式,而不是模型形式

maxes--fields.py
from django.forms.models import ModelChoiceField

class workoutsliftModelChoice(ModelChoiceField):
    def label_from_instance(self, obj):
      return str(obj.lift)

maxes -- forms.py
class maxesModelForm(forms.ModelForm):
    lift = workoutsliftModelChoice(
        label=("Lift"),
        queryset=wplans.objects.all(),
        required=True
    )
    reps   = forms.IntegerField()
    weight   = forms.IntegerField()

    class Meta:
        model = maxes
        fields = [
            'lift',
            'weight',
            'reps'
        ]
maxes -- views.py
def maxesList(request, *args, **kwargs): 
  maxesInputForm = maxesModelForm(request.POST or None)
  maxesListTemplate = maxes.objects.all()
  if maxesInputForm.is_valid():
    maxesInputForm.save()
    maxesInputForm = maxesModelForm()
  context_form = {
    'maxesListTemplate': maxesListTemplate,
    'maxesInputForm': maxesInputForm
   }
  return render(request, 'maxes/maxes_list.html', context_form)

workouts -- models.py

class wplans(CreationModificationDateMixin):
    wplan   = models.CharField(max_length=50, blank=False)
    gnumber = models.IntegerField(default=0, blank=False)
    wnumber = models.IntegerField(default=0, blank=False)
    lift    = models.CharField(max_length=30, blank=False)
    weight  = models.IntegerField(default=0, blank=False)
    sets    = models.IntegerField(default=0, blank=False)
    reps    = models.IntegerField(default=0, blank=False)

    def __str__(self):
       return '%s' % (self.wplan)

结果是将电梯的名称输入到maxes数据库中,而不是wokoutplan名称。如果我将self.wplan重命名为self.lift,则可以正常工作

0 个答案:

没有答案