将子类modelchoicefields从表单保存到数据库Djang

2024-09-30 22:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个应用程序最大值和训练。我在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)

结果是将电梯名称输入MAXS数据库,而不是wokoutplan名称。如果我将self.wplan重命名为self.lift,它就会工作


Tags: pyself名称false应用程序defaultmodelsdef