Как я могу создать отношения ManyToMany с той же моделью в Django и сохранить в базе данных? - PullRequest
0 голосов
/ 25 мая 2018

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

forms.py

class VariableForm(ModelForm):
    class Meta:
        model = variable
        fields = ['name', 'area', 'parameterName', 'order', 'type', 'format', 'units', 'comboItems',
                  'hiAlarm', 'loAlarm', 'scaleHiMax', 'scaleLoMax', 'deviationAlarm','selectiveList', 'round',
                  'days', 'required',  'hidden', 'readOnly', 'holdLast', 'calibrationFrequency',
                  'dateNextCalibration', 'triggerCalibrated']
        widgets = {
            'comboItems': forms.Textarea(attrs={'rows':1, 'cols': 40, 'style': 'height: 2em;padding-top:0'}),
            'forceValue': forms.Textarea(attrs={'rows':1, 'cols': 40, 'style': 'height: 2em;padding-top:0',
                                                'placeholder':'This will force all input to this variable'})
        }
        #selectiveList = forms.ModelMultipleChoiceField(queryset=variable.objects.all().order_by('-name').reverse())

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(VariableForm, self).__init__(*args, **kwargs)
        self.fields['round'] = forms.ModelMultipleChoiceField(
            queryset=opRound.objects.all(),
            widget=forms.SelectMultiple,
            label='Rounds',
            required=False
        )
        self.fields['selectiveList'] = forms.ModelMultipleChoiceField(
            queryset=variable.objects.all().order_by('-name').reverse(),
            widget=forms.SelectMultiple,
            label='Select Variables',
            required=False
        )
        self.fields['days'] = forms.ModelMultipleChoiceField(
            queryset=dayOfWeek.objects.all(),
            widget=forms.SelectMultiple,
            label='Days',
            required=False
        )
        self.fields['area'].choices = AreaIterator(request = self.request)
        try:
            self.fields['order'].initial = variable.objects.latest().order+1
        except Exception,e:
            print e

model.py

class variable(models.Model):
    name = models.CharField(max_length=255)
    area = models.ForeignKey(area)#parent
    order = models.IntegerField("Order Index (0 is first, 1 is next, etc.)",default=999)#order index to display in order correctly, ascending
    type = models.CharField(max_length=255, choices=(("Value", "Value"), ("Runtime", "Runtime/FlowTotal"),
                                     ("Message", "Message"), ("CheckBox", "Check Box List"), ("Selection", "Selection Box"), ("Formula2", "Formula with other Variables"),
                                     ("OnOff", "In/Out of Service Selection"), ("OnOffSelection", "Selective On/Off")),
                            default = "Value" )#what type of variable
    format = models.CharField(max_length=255,choices=(("Number", "Number (Without Decimals)"),
                                                      ("2Number", "Number (With Decimals)"), ("Date", "Date"),
                                                      ("Time", "Time"), ("Text", "Text")), blank=True, null=True, default="2Number" )#number format if needed
    units = models.CharField(max_length=255,blank=True,null=True)#units of measurement
    required = models.BooleanField(default=True)#is the variable required in a round
    hiAlarm = models.FloatField("High Alarm",blank=True,null=True)#red notify if above
    loAlarm = models.FloatField("Low Alarm",blank=True,null=True)#yellow notify if below
    scaleHiMax = models.FloatField("Limit maximum value",blank=True,null=True)#scale to high max if needed
    scaleLoMax = models.FloatField("Limit low value",blank=True,null=True)#scale to low if needed
    deviationAlarm = models.FloatField("Deviation Alarm",blank=True,null=True,
                                       help_text="Triggers an alarm if the value between this record and the last is greater than this percentage.")#%change check
    round = models.ManyToManyField(opRound,blank=True)#round of gathering data
    days = models.ManyToManyField(dayOfWeek,blank=True)#day of the week
    selectiveList = models.ManyToManyField("self",through="variable",blank=True,symmetrical=False)#List to determine which variables to display when the selection is "OFF"
    parameterName = models.CharField("Parameter Name (ReportID)",max_length=255,blank=True,null=True)#hachWIM ID
    comboItems = models.TextField("List of comma separated options.", blank=True,null=True)#list deliminated by a column for choosing
            #PUT EQUATION HERE
    hidden = models.BooleanField("Sync to tablet",default=True)#this muse be True if required is true
    readOnly = models.BooleanField("Read only.", default = False)
    dateTimeEdited = models.DateTimeField(auto_now=True)#date edited
    userEdited = models.ForeignKey(CustomUser,blank=True,null=True,related_name="userEditedV")# last user to edit data
    forceValue = models.TextField(blank=True,null=True)#force reading
    userForced = models.ForeignKey(CustomUser,blank=True,null=True,related_name="userForcedV")# last user to force data
    useForce = models.BooleanField("Turn Forcing On", default=False)
    dateNextCalibration = models.DateField("Next Calibration Date", blank=True,null=True, help_text="YYYY-MM-DD")
    triggerCalibrated = models.BooleanField("Trigger next calibration date", default=False)
    calibrationFrequency = models.ForeignKey(calibrationFrequency, blank=True, null=True)
    version = models.BigIntegerField(default=1)#used for sync
    holdLast = models.BooleanField("Selecting this will hold the last value on the tablet automatically.", default=False)

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

Вот как выглядит множественный выбор.

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