为了账号安全,请及时绑定邮箱和手机立即绑定

Django createView 将当前 user_id 传递给 Modelform

Django createView 将当前 user_id 传递给 Modelform

倚天杖 2023-09-05 17:29:12
该文件充满了NUL, '\x00',需要将其删除。清理行后,用于pandas.DataFrame从 加载数据。dimport pandas as pdimport string  # to make column names# the issue is the the file is filled with NUL not whitespacedef 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 functiondfs = 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    Odatetime                                                                                                 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.02020-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.02020-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.02020-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.02020-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
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

在您看来,您应该传递用户的主键,因此:


    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 settings


class Event(models.Model):

    # …

    manage = models.ForeignKey(

        settings.AUTH_USER_MODEL,

        on_delete=models.CASCADE

    )


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信