Ejemplo n.º 1
0
 class F(StatCalculatorForm):
     level = DuplicateField(
         fields.IntegerField(
             u'Level',
             default=100,
             validators=[wtforms.validators.NumberRange(1, 100)]),
         min_entries=num_dupes,
     )
     stat = DuplicateField(
         StatField(
             c.stats,
             fields.IntegerField(default=0,
                                 validators=[
                                     wtforms.validators.NumberRange(
                                         min=0, max=700)
                                 ])),
         min_entries=num_dupes,
     )
     effort = DuplicateField(
         StatField(
             c.stats,
             fields.IntegerField(default=0,
                                 validators=[
                                     wtforms.validators.NumberRange(
                                         min=0, max=255)
                                 ])),
         min_entries=num_dupes,
     )
Ejemplo n.º 2
0
class Form_tao_san_pham(FlaskForm):
    ten_san_pham = fields.StringField(
        'Tên sản phẩm:', [validators.required('Tên sản phẩm bỏ trống')])
    ten_loai = fields.SelectField(
        'Loại:', [validators.required('Tên sản phẩm bỏ trống')])
    gia_ban = fields.IntegerField('Giá bán:',
                                  [validators.required('Giá bán bỏ trống')])
    gia_nhap = fields.IntegerField('Giá nhập:',
                                   [validators.required('Giá nhập bỏ trống')])
    thuoc_tinh = fields.TextField('Thuộc tính:')
    so_luong_ton = fields.IntegerField('Số lượng: ')
    submit = fields.SubmitField('Tạo')

    def ghi_vao_db(self):
        san_pham = San_pham()
        ten_sp = self.ten_san_pham.data.strip().lower()
        san_pham.ten_san_pham = ten_sp
        san_pham.ma_loai = int(self.ten_loai.data)
        san_pham.gia_ban = int(self.gia_ban.data)
        san_pham.gia_nhap = int(self.gia_nhap.data)
        san_pham.thuoc_tinh = self.thuoc_tinh.data.strip()
        san_pham.so_luong_ton = int(self.so_luong_ton.data)
        db.session.add(san_pham)
        db.session.commit()
        return san_pham.get_id()
Ejemplo n.º 3
0
class CameraForm(FlaskForm):
    name = fields.StringField("Camera Name")
    frame_rate = fields.FloatField(
        default=15, validators=[validators.NumberRange(min=1, max=175)])
    frame_size = fields.SelectField("Frame Size")
    # width = fields.FloatField()
    # height = fields.FloatField()
    latitude = fields.FloatField(
        "Latitude", validators=[validators.NumberRange(min=-180, max=180)])
    longitude = fields.FloatField(
        "Longitude", validators=[validators.NumberRange(min=-180, max=180)])

    uri = fields.StringField("URI")

    brand = fields.SelectField("Camera Brand")
    # model = fields.SelectField("Camera Model")
    ip_address = fields.StringField("Camera IP Address")
    username = fields.StringField("Username")
    password = fields.StringField("Password")
    channel = fields.IntegerField("Channel", default=0)

    storage_period = fields.IntegerField(
        "Storage Period (Days)",
        default=30,
        validators=[validators.NumberRange(min=0)])
    motion_detector = fields.BooleanField("Motion Detector", default=False)
    sensitivity = fields.FloatField(
        "Sensitivity",
        default=50,
        validators=[validators.NumberRange(min=0, max=100)])
Ejemplo n.º 4
0
class LaunchAdsForm(form.Form):
    image = fields.StringField(u'图片', [validators.Required()])
    action = fields.StringField(u'链接', [validators.Optional()])
    duration = fields.IntegerField(u'显示时长', [validators.Required()])
    rate = fields.IntegerField(u'显示概率基数', [validators.InputRequired()])
    begin_at = TimeStampField(u'开始时间', [validators.Required()])
    expire_at = TimeStampField(u'结束时间', [validators.Required()])
Ejemplo n.º 5
0
class UserPreferenceForm(Form):
    """Form for creating or updating a user preference."""

    user_id = fields.IntegerField(u'User ID', [validators.required()])
    ingredient_id = fields.IntegerField(u'Ingredient ID',
                                        [validators.required()])
    coefficient = fields.FloatField(u'Coefficient', [validators.required()])
Ejemplo n.º 6
0
class JoinMatchDeskByTypeValidator(BaseValidator):
    x = fields.StringField()
    user_id = fields.IntegerField("user_id")
    room_type = fields.IntegerField("room_type")
    session_id = fields.StringField("session_id")

    def validate_user_id(self, field):
        if UserManager().get_user_by_id(self.user_id.data):
            raise validators.ValidationError(errorcode.USER_IN_OTHER_DESK)

    def validate_session_id(self, field):
        if not self.session_id.data:
            raise validators.ValidationError(errorcode.USER_IN_OTHER_DESK)

    def validate_room_type(self, field):
        if int(self.room_type.data) not in [0, 1, 2]:
            raise validators.ValidationError(errorcode.ROOM_TYPE_ERROR)

    def validate_x(self, field):
        r = notify_web_server_join_room(self.user_id.data,
                                        self.session_id.data,
                                        self.room_type.data)
        print "JoinMatchDeskByTypeHandler r =", r
        code = r["data"].get("code")
        if code:
            raise validators.ValidationError(code)
Ejemplo n.º 7
0
class tbrep(Form):

    tier = fields.SelectField('Tier',
                              choices=[('pro', 'pro'),
                                       ('standard', 'standard'),
                                       ('lite', 'lite'),
                                       ('development', 'development'),
                                       ('trial', 'trial'),
                                       ('enterprise', 'enterprise')])
    volume = fields.StringField('Volume', description="Volume")
    retention = fields.IntegerField('Retention')
    sub_rate = fields.IntegerField('Subscription Rate')
    billing_period = fields.SelectField('Billing Period',
                                        [validators.InputRequired()],
                                        choices=[('annual', 'annual'),
                                                 ('monthly', 'monthly')])
    plan_type = fields.SelectField('Plan_Type', [validators.InputRequired()],
                                   choices=[('standard', 'Standard'),
                                            ('tru-up', 'Tru-Up'),
                                            ('flex', 'Flex')])
    payment_method = fields.SelectField('payment_method',
                                        [validators.InputRequired()],
                                        choices=[
                                            ('Credit Card', 'Credit Card'),
                                            ('Invoice', 'Invoice'),
                                            ('Wire Transfer', 'Wire Transfer')
                                        ])
    created = fields.StringField('Created Date', [validators.InputRequired()])
    rep_name = fields.StringField('Rep Name')
    acct_id = fields.HiddenField(' ')
    subdomain = fields.HiddenField(' ')
    sales_rep_id = fields.HiddenField(' ')
    mode = fields.HiddenField(' ')
    orig_created = fields.HiddenField(' ')
Ejemplo n.º 8
0
class SampleForm(FlaskForm):
    """Form for creating a new Samples document."""

    session = fields.IntegerField('Session', validators=[validators.required()])
    position = fields.IntegerField(
        'Sample Position/FOV', validators=[validators.required()]
    )

    time_step = fields.StringField('Time Step', validators=[validators.Length(0, 255)])
    z_step = fields.StringField('Z Step', validators=[validators.Length(0, 255)])

    specimen = fields.StringField(
        'Specimen Name', validators=[validators.Length(0, 1000)]
    )

    # imaging parameters (embedded document fields)
    imaging_params = fields.FormField(ImagingParametersForm)

    # dimensions (embedded document fields)
    dimensions = fields.FormField(DimensionsForm)

    # modality (embedded document fields)
    modality = fields.FormField(ModalityInformationForm)

    # location in the ontology
    kinetics = fields.RadioField(
        choices=('static', 'dynamic'), validators=[validators.required()]
    )
    spatial_dim = fields.RadioField(
        choices=('2d', '3d'), validators=[validators.required()]
    )
Ejemplo n.º 9
0
class MasterDataForm(BaseForm):
  pg_name = fields.StringField(('Name'), [validators.Required(), validators.Length(max=FIELD_MAXLENGTH, message=(
                                                  "Field cannot be longer than %(max)d characters."))])
  sport = fields.SelectField(u'Sport', choices=[(key, value) for key, value in constants.SPORTS_LIST.items()], default='others')
  locality_id = fields.HiddenField()
  business_id = fields.HiddenField()
    
  address = fields.FormField(Address)
  contact_pg = fields.FormField(BasicContact)
  
  public = fields.SelectField(u'Open for Public?', choices=[(key, value) for key, value in constants.OPEN_DICT.items()], default=0)
  booking_days = fields.SelectField(u'Public Booking Day(s)', choices=[(key, value) for key, value in constants.DAYS_LIST.items()], default='sunday')
  regular_time = fields.StringField('Regular Timings')
  ground_type = fields.SelectField(u'Ground Type', choices=[(key, value) for key, value in constants.GROUND_TYPE.items()], default='both')
  surface_type = fields.StringField('Types of Surfaces')
  tot_fields = fields.IntegerField(('No.of Courts'), [validators.Optional()])
  ground_rules = fields.TextAreaField('Ground Rules')
  
  tc_name = fields.StringField(('Club Name'), [validators.Optional(), validators.Length(max=FIELD_MAXLENGTH, message=(
                                                  "Field cannot be longer than %(max)d characters."))])
  tc_open_days = fields.SelectField(u'Club Open Day(s)', choices=[(key, value) for key, value in constants.DAYS_LIST.items()], default='sunday')
  age_limit = fields.StringField('Age Limits')
  tc_participants = fields.IntegerField(('No.of Participants'), [validators.Optional()])
  contact_tc = fields.FormField(BasicContact)
  
  se_name = fields.StringField(('Event Name'), [validators.Length(max=FIELD_MAXLENGTH, message=(
                                                  "Field cannot be longer than %(max)d characters."))])
  start_datetime = fields.DateField(('Start Date'), [validators.Optional()])
  end_datetime = fields.DateField(('End Date'), [validators.Optional()])
  contact_se = fields.FormField(BasicContact) 
  pass
  
Ejemplo n.º 10
0
class WatchLiveTaskForm(form.Form):
    name = fields.StringField(u'活动标题', [validators.DataRequired()])
    status = fields.SelectField(u'状态',
                                [validators.InputRequired()],
                                coerce=int,
                                choices=[
                                    (const.ONLINE, u'在线'),
                                    (const.OFFLINE, u'下线')
                                ])
    begin_at = TimeStampField(u'开始时间', [validators.DataRequired()])
    expire_at = TimeStampField(u'结束时间', [validators.DataRequired()])
    duration = fields.IntegerField(u'观看时长要求\n单位:分钟', [validators.InputRequired()], default=5)
    chance = fields.IntegerField(u'每日上限次数', [validators.InputRequired()], default=3)
    icon = fields.StringField(u'按钮图标', [validators.DataRequired()])
    os = fields.SelectField(u'平台要求', [validators.InputRequired()],
                            choices=[
                                ('all', u'全部'),
                                ('android', u'Android'),
                                ('ios', u'IOS')], default=u'全部')
    channels = fields.SelectMultipleField(u'推广渠道', [validators.Optional()])
    group = fields.SelectField(u'用户组', coerce=ObjectId)
    version_code_mix = fields.SelectField(u'版本要求(版本号大于等于)', [validators.Optional()],
                                          coerce=int)
    version_code_max = fields.SelectField(u'版本要求(版本号小于等于)', [validators.Optional()],
                                          coerce=int)
    province = fields.SelectMultipleField(u'省份', [validators.Optional()])
    campaign_id = fields.StringField(u'营销平台活动ID', [validators.InputRequired()])
Ejemplo n.º 11
0
class SaveLocalityForm(BaseForm):  
  lat = fields.StringField(('Latitude'), [validators.Required(message=('Latitude is not empty'))])
  long = fields.StringField(('Longitude'), [validators.Required(message=('Longitude is not empty'))])
  radius = fields.IntegerField(('Radius'), [validators.Required()])
  limit = fields.IntegerField(('Limit'), [validators.Required()])
  key = fields.StringField(('Api Key'), [validators.Required(message=('Api Key is not empty'))])
  pass
Ejemplo n.º 12
0
class PostsForm(form.Form):
    title = fields.StringField('标题', validators=[DataRequired('标题不能为空')])
    reward = fields.IntegerField('悬赏')
    comment_count = fields.IntegerField('回帖数')
    is_top = fields.BooleanField('置顶')
    is_cream = fields.BooleanField('加精')
    is_closed = fields.BooleanField('已结')
    form_columns = ('title','reward','comment_count', 'is_top','is_cream', 'is_closed')
Ejemplo n.º 13
0
class BannerSdkForm(form.Form):
    vertical_image = fields.StringField(u'竖版图片链接', [validators.Required()])
    transverse_image = fields.StringField(u'横版图片链接', [validators.Required()])
    action = fields.StringField(u'链接', [validators.Required()])
    duration = fields.IntegerField(u'显示时长', [validators.Required()])
    order = fields.IntegerField(u'显示顺序', [validators.InputRequired()],
                                default=0)
    begin_at = TimeStampField(u'开始时间', [validators.Required()])
    expire_at = TimeStampField(u'结束时间', [validators.Required()])
Ejemplo n.º 14
0
class VkUserForm(form.Form):
    """создаём форму"""
    chat_id = fields.IntegerField(
        'chat_id', [validators.DataRequired()])  # поле с chat_id в базе
    group = fields.SelectField('Группа',
                               widget=Select2Widget())  # поле с group в базе
    notifications = fields.IntegerField('За сколько минут делать напоминания',
                                        default=0)  # поле с chat_id в базе
    reminders = InlineFormField(InnerFormWeeks,
                                'Время напоминаний',
                                default={})  # поле с reminders в базе
Ejemplo n.º 15
0
class ColumnForm(Form):
    col_id = fields.HiddenField()
    column_width = fields.IntegerField(
        'col width', description='width of columms per bootstrap3 grid')
    push = fields.IntegerField(
        'push', description='push column x col width to the right')
    pull = fields.IntegerField(
        'pull', description='pull column x col width to the left')
    offset = fields.IntegerField(
        'offset',
        description='place column offset x col width from normal placement')
Ejemplo n.º 16
0
class AtomicSwapInitPayloadForm(ProtoForm):
    receiver_address = AddressField()
    sender_address_non_local = fields.StringField(
        validators=[validators.DataRequired()])
    amount = fields.IntegerField(validators=[validators.DataRequired()])
    swap_id = SwapIDField()
    secret_lock_by_solicitor = fields.StringField(
        validators=[validators.Optional()])
    email_address_encrypted_by_initiator = fields.StringField(
        validators=[validators.Optional()])
    created_at = fields.IntegerField(validators=[validators.DataRequired()])
Ejemplo n.º 17
0
class ActivityVideoForm(form.Form):
    author = ObjectIdField(u'参赛用户', [validators.Required()])
    video_id = ObjectIdField(u'参赛视频', [validators.Required()])
    vv = fields.IntegerField(u'播放量', [validators.InputRequired()], default=0)
    like_count = fields.IntegerField(u'点赞数', [validators.InputRequired()],
                                     default=0)
    comment_count = fields.IntegerField(u'评论数', [validators.InputRequired()],
                                        default=0)
    vote = fields.IntegerField(u'投票数', [validators.InputRequired()], default=0)
    activity_id = ObjectIdField(u'参赛活动', [validators.Required()])
    top_author = fields.IntegerField(u'排名', [validators.Optional()])
Ejemplo n.º 18
0
class VideoTopicForm(form.Form):
    name = fields.StringField(
        u'专题名称', [validators.InputRequired(),
                  validators.length(max=15)])
    image = fields.StringField(u'专题背景图', [validators.Required()])
    description = fields.StringField(
        u'描述文字', [validators.Required(),
                  validators.length(max=100)])
    share_title = fields.StringField(u'分享标题')
    share_desc = fields.StringField(u'分享摘要')
    count = fields.IntegerField(u'视频数量')
    order = fields.IntegerField(u'专题显示顺序', [validators.InputRequired()])
Ejemplo n.º 19
0
class EventForm(Form):
    """This class contains form fields for the Create Event form."""

    currentDate = date.today()
    today = currentDate.strftime('%m/%d/%Y')

    event_name = fields.StringField('Name your event:',
                                    validators=[validators.InputRequired()])
    description = fields.TextAreaField('Event description:',
                                       validators=[validators.InputRequired()])
    category = fields.SelectField('Event category:', choices=[
        ('hobbies-crafts', 'Arts & Crafts'),
        ('beliefs', 'Beliefs'),
        ('book-clubs', 'Book Clubs'),
        ('career-business', 'Career & Business'),
        ('education', 'Education'),
        ('fashion-beauty', 'Fashion & Beauty'),
        ('film', 'Film'),
        ('food', 'Food'),
        ('arts-culture', 'General Arts & Culture'),
        ('language', 'Language'),
        ('music', 'Music'),
        ('outdoors-adventure', 'Outoors Adventures'),
        ('parents-family', 'Parenting & Family'),
        ('social', 'Social'),
        ('sports-fitness', 'Sports & Fitness'),
        ('tech', 'Technology'),
        ], validators=[validators.InputRequired()])
    formatted_address = fields.StringField('Location Address:',
                                           validators=[validators.InputRequired()])
    start_date = DateTimeField('When will it start?',
                               display_format='%Y-%m-%d %H:%M',
                               validators=[validators.InputRequired()],
                               render_kw={'type': 'datetime-local'})
    end_date = DateTimeField('When will it end?',
                             display_format='%Y-%m-%d %H:%M',
                             validators=[validators.InputRequired()],
                             render_kw={'type': 'datetime-local'})
    cap = \
        fields.IntegerField('Maximum number of people able to participate:'
                            , validators=[])
    attending = \
        fields.IntegerField('How many people are attending already?',
                            validators=[])

    # location parsing fields (hidden)
    lat = fields.StringField('Latitude:')
    lng = fields.StringField('Longitude:')
    name = fields.StringField('Location Name:')
    address_2 = fields.StringField('Address Line 2:')
    postal_code = fields.StringField('Zip code:')
    sublocality = fields.StringField('City:')
    administrative_area_level_1_short = fields.StringField('State:')
Ejemplo n.º 20
0
class PredictForm(Form):
    """Fields for Predict"""

    avg_reordered_items = fields.IntegerField('Avg Reordered items per order:',
                                              validators=[Required()])
    avg_days_since_prior = fields.IntegerField('Avg days since prior order:',
                                               validators=[Required()])
    hour_of_the_day = fields.IntegerField('Avg hour of the day:',
                                          validators=[Required()])
    day_of_the_week = fields.IntegerField('Avg day of the week:',
                                          validators=[Required()])

    submit = fields.SubmitField('Submit')
Ejemplo n.º 21
0
class FlavorForm(BaseForm):
    name = fields.TextField('Name',
                            [validators.Required(),
                             validators.Length(max=50)])
    description = fields.TextField(
        'Description', [validators.Required(),
                        validators.Length(max=100)])
    vpus = fields.IntegerField('VPUs', [validators.Required()])
    memory = fields.IntegerField('Memory (MB)', [validators.Required()])
    disk = fields.IntegerField('Disk (GB)', [validators.Required()])
    network = fields.IntegerField('Network (Mbits/sec)',
                                  [validators.Required()])
    rate = fields.IntegerField('Starting Rate', [validators.Required()])
Ejemplo n.º 22
0
class UsersForm(form.Form):
    email = fields.StringField('用户邮箱', validators=[DataRequired('邮箱不能为空'), Email('邮箱格式不正确')])
    username = fields.StringField('昵称', validators=[DataRequired('昵称不能为空')])
    is_active = fields.BooleanField('激活状态')
    is_disabled = fields.BooleanField('禁用')
    is_admin = fields.BooleanField('管理员')
    vip = fields.IntegerField('VIP等级')
    avatar = fields.StringField('头像')
    coin = fields.IntegerField('金币')
    description = fields.TextAreaField('签名')
    city = fields.StringField('城市')
    renzheng = fields.StringField('认证信息')
    form_columns = ('email', 'username', 'is_active', 'is_admin', 'avatar', 'coin', 'description', 'city')
Ejemplo n.º 23
0
class Pipeline(form.Form):
    job_id = fields.IntegerField()
    applicant = fields.IntegerField()
    resume = fields.IntegerField()
    status = fields.StringField()

    def validate_application(self, field):
        if db.session.query(models.Pipeline).filter(
            (models.Pipeline.resume == self.resume.data)
                & (models.Pipeline.job_id == self.job_id.data)).count() > 0:
            return False
        else:
            return True
Ejemplo n.º 24
0
class UserSearch(FlaskForm):

    tag_num = fields.IntegerField("Tag Number:",
                                  validators=[validators.optional()])

    shipment_num = fields.IntegerField("Shipment Number:",
                                       validators=[validators.optional()])

    client = fields.SelectField("Client:",
                                choices=[],
                                validators=[validators.optional()])

    submit = fields.SubmitField("Submit")
Ejemplo n.º 25
0
class SearchForm(FlaskForm):#validators=[validators.optional()] 

    tag_num = fields.IntegerField("Tag Number:", validators=[validators.optional()] )

    shipment_num = fields.IntegerField("Shipment Number:", validators=[validators.optional()] )

    designer = fields.SelectField("Designer:", choices=[], validators=[validators.optional()] )

    client = fields.SelectField("Client:", choices=[], validators=[validators.optional()] )

    submit = fields.SubmitField("Submit")

    def validate(self):##stops flask form from flagging dynamically added items
        return True
Ejemplo n.º 26
0
class AddForm(FlaskForm):

    designer = fields.SelectField("Designer:", choices=[], validators=[validators.optional()])

    client = fields.SelectField("Client:", choices=[], validators=[validators.optional()])

    volume = fields.IntegerField("Volume:", validators=[validators.optional()])

    description = fields.StringField("Description:", validators=[validators.optional()])

    location = fields.StringField("Location:", validators=[validators.optional()])

    image_num = fields.IntegerField("Image number:", validators=[validators.optional()])

    submit = fields.SubmitField("Submit")
Ejemplo n.º 27
0
class PrescreenForm(Form):
    household_size = fields.IntegerField(_('What is your household size?'),
                                         validators=[])
    household_income = fields.IntegerField(
        _('What is your monthly household income?'), validators=[])
    has_health_insurance = fields.RadioField(
        _('Do you have health insurance?'),
        choices=CONSTANTS.YNN_NONULL_CHOICES,
        default="",
    )
    eligible_for_medicaid = fields.RadioField(
        _('Are you eligible for Medicare/Medicaid?'),
        choices=CONSTANTS.YNN_NONULL_CHOICES,
        default="",
    )
Ejemplo n.º 28
0
class UserForm(form.Form):
    """用户管理表单类"""
    username = fields.StringField('昵称', validators=[DataRequired('昵称不能为空')])
    email = fields.StringField('用户邮箱', validators=[DataRequired('邮箱不能为空'), Email('邮箱格式不正确')])
    is_active = fields.BooleanField('激活状态')
    is_disabled = fields.BooleanField('禁用')
    is_admin = fields.BooleanField('超级用户')
    vip = fields.IntegerField('vip等级')
    avatar = fields.StringField('头像')
    coin = fields.IntegerField('金币')
    description = fields.TextAreaField('描述')
    city = fields.StringField('城市')
    auth_msg = fields.StringField('认证信息')
    role_ids = fields.SelectMultipleField('角色', widget=Select2Widget(multiple=True))
    form_columns = ('username', 'email', 'is_active', 'is_admin', 'avatar', 'coin', 'description', 'city')
Ejemplo n.º 29
0
class EditArticleForm(flask_wtf.FlaskForm):
    name = fields.StringField(
        'Namn',
        validators=[validators.InputRequired(),
                    validators.Length(max=15)])
    value = html5_fields.DecimalField('Pris',
                                      default=0,
                                      render_kw={
                                          'step': .01,
                                          'min': -1000,
                                          'max': 1000
                                      },
                                      validators=[
                                          validators.InputRequired(),
                                          validators.NumberRange(min=-1000,
                                                                 max=1000),
                                      ])
    standardglas = html5_fields.DecimalField('Standardglas',
                                             default=1,
                                             render_kw={'step': .1},
                                             validators=[
                                                 validators.InputRequired(),
                                             ])
    description = fields.TextAreaField(
        'Beskrivning',
        description="Vilka produkter som ingår och/eller beskrivning. "
        "Markdown.")
    weight = fields.IntegerField('Sorteringsvikt',
                                 description="Heltal. En högre vikt sjunker.",
                                 validators=[validators.InputRequired()])
Ejemplo n.º 30
0
class DissolveDeskAnswerValidator(BaseValidator):
    agree = fields.IntegerField("agree", default=1)

    @property
    def user(self):
        return self.handler.cur_user_from_manager

    @property
    def desk(self):
        return room_mgr.get_desk_by_user_id(self.user.user_id)

    def validate_agree(self, field):
        if not self.user:
            raise validators.ValidationError(errorcode.USER_NOT_FOUND_ON_DESK)

        if not self.desk:
            raise validators.ValidationError(errorcode.DESK_NOT_EXIST)

        if not self.desk.dissolve_agreed_users:
            # 没有玩家申请过解散房间
            raise validators.ValidationError(errorcode.INVALID_REQUEST)

        if self.user.user_id in self.desk.dissolve_agreed_users or self.user.user_id in self.desk.dissolve_reject_users:
            # 玩家已经作出过响应, 重复请求
            raise validators.ValidationError(errorcode.REPEAT_REQUEST)