Django createView 将当前 user_id 传递给 Modelform

该文件充满了NUL, '\x00',需要将其删除。

清理行后,用于pandas.DataFrame从 加载数据。d

import pandas as pd

import string  # to make column names


# the issue is the the file is filled with NUL not whitespace

def import_file(filename):

    # open the file and clean it

    with open(filename) as f:

        d = list(f.readlines())


        # replace NUL, strip whitespace from the end of the strings, split each string into a list

        d = [v.replace('\x00', '').strip().split(',') for v in d]


        # remove some empty rows

        d = [v for v in d if len(v) > 2]


    # load the file with pandas

    df = pd.DataFrame(d)


    # convert column 0 and 1 to a datetime

    df['datetime'] = pd.to_datetime(df[0] + ' ' + df[1])


    # drop column 0 and 1

    df.drop(columns=[0, 1], inplace=True)


    # set datetime as the index

    df.set_index('datetime', inplace=True)


    # convert data in columns to floats

    df = df.astype('float')


    # give character column names

    df.columns = list(string.ascii_uppercase)[:len(df.columns)]

    

    # reset the index

    df.reset_index(inplace=True)

    

    return df.copy()



# call the function

dfs = list()

filenames = ['67.csv']

for filename in filenames:

    

    dfs.append(import_file(filename))

display(df)

                       A    B      C    D    E      F     G     H      I     J     K     L    M    N    O

datetime                                                                                                 

2020-02-03 15:13:39  5.5  5.8  42.84  7.2  6.8  10.63  60.0   0.0  300.0   1.0  30.0  79.0  0.0  0.0  0.0

2020-02-03 15:13:49  5.5  5.8  42.84  7.2  6.8  10.63  60.0   0.0  300.0   1.0  30.0  79.0  0.0  0.0  0.0

2020-02-03 15:13:59  5.5  5.7  34.26  7.2  6.8  10.63  60.0  22.3  300.0   1.0  30.0  79.0  0.0  0.0  0.0

2020-02-03 15:14:09  5.5  5.7  34.26  7.2  6.8  10.63  60.0  15.3  300.0  45.0  30.0  79.0  0.0  0.0  0.0

2020-02-03 15:14:19  5.5  5.4  17.10  7.2  6.8  10.63  60.0  50.2  300.0  86.0  30.0  79.0  0.0  0.0  0.0



倚天杖
浏览 153回答 1
1回答

茅侃侃

在您看来,您应该传递用户的主键,因此:    def get_form_kwargs(self, *args, **kwargs):        kwargs = super(CalendarEventAdd, self).get_form_kwargs()        kwargs['user_id'] = self.request.user.pk        return kwargs您可以将其保存在EventForm对象中:class EventForm(forms.ModelForm):        def __init__(self, *args, user_id=None, **kwargs):           super(EventForm, self).__init__(*args, **kwargs)        self.user_id = user_id        # input_formats parses HTML5 datetime-local input to datetime field        self.fields['start_time'].input_formats = ('%Y-%m-%dT%H:%M',)        self.fields['end_time'].input_formats = ('%Y-%m-%dT%H:%M',)            def clean(self, *args, **kwargs):        form_start_time = self.cleaned_data.get('start_time')        form_end_time = self.cleaned_data.get('end_time')        form_manage_id = self.cleaned_data.get('manage_id')        between = Event.objects.exclude(pk=self.instance.pk).filter(            manage_id=self.user_id,            end_time__gte=form_start_time,            start_time__lte=form_end_time        )        if between.exists():            raise forms.ValidationError('Already Calendar entry for this time')        return super().clean()如果您稍后决定不仅使用 来创建.exclude(pk=self.instance.pk)对象,还使用来更新对象,则 将会排除您正在编辑的对象。EventFormEvent注意:文档建议使用AUTH_USER_MODEL设置 [Django-doc]而不是 get_user_model()[Django-doc]。这更安全,因为如果身份验证应用程序尚未加载,设置仍然可以指定模型的名称。因此最好这样写:from django.conf import settingsclass Event(models.Model):    # …    manage = models.ForeignKey(        settings.AUTH_USER_MODEL,        on_delete=models.CASCADE    )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python