always use valid_data() to construct querydict