-
Notifications
You must be signed in to change notification settings - Fork 87
Open
Labels
status:needs-triageHas not been triaged yetHas not been triaged yettype:bugSomething isn't workingSomething isn't working
Description
Checklist
- I have searched the existing issues for similar issues.
- I added a very descriptive title to this issue.
- I have provided sufficient information below to help reproduce this issue.
Summary
Description:
When using pydantic_input
with lists (e.g., List[str]
) or list of models, the form do not render correctly.
This issue occurs despite following the correct usage patterns from the [official examples], specifically the Complex Instance Model example. This behavior is observed for:
- Simple lists like
List[str]
,List[int]
- List of Pydantic models
# Nested Pydantic Model
class NestedModel(BaseModel):
id: int = Field(..., description="ID of the nested object")
name: str = Field(..., description="Name of the nested object")
# Main ConfigModel
class ConfigModel(BaseModel):
keys: List[str] = Field(..., description="List of keys used for lookup")
value: str = Field(..., description="Value associated with the keys")
nested_items: List[NestedModel] = Field(..., description="List of nested model instances")
The above models give the following form when used with pydantic_input
method
Reproducible Code Example
import streamlit as st
from pydantic import BaseModel, Field
from typing import List, Dict, Any
import streamlit_pydantic as sp
# Nested Pydantic Model
class NestedModel(BaseModel):
id: int = Field(..., description="ID of the nested object")
name: str = Field(..., description="Name of the nested object")
# Main ConfigModel
class ConfigModel(BaseModel):
keys: List[str] = Field(..., description="List of keys used for lookup")
value: str = Field(..., description="Value associated with the keys")
nested_items: List[NestedModel] = Field(..., description="List of nested model instances")
# -------------------------
# Streamlit UI
# -------------------------
st.set_page_config(layout="wide")
st.title("ConfigModel Input Form")
# Pre-filled data (Optional)
data = {
"keys": ["id1", "id2"],
"value": "example_value",
"metadata": [{"key": "meta1", "value": 100}, {"key": "meta2", "value": 200}],
"nested_items": [{"id": 1, "name": "Item 1"}, {"id": 2, "name": "Item 2"}]
}
model_instance = ConfigModel(**data)
# Render the form using streamlit_pydantic
with st.form("config_model_form"):
form_result = sp.pydantic_input(key="config_model", model=model_instance)
submit_button = st.form_submit_button("Submit")
# Handle form submission
if submit_button:
if form_result:
try:
validated_data = ConfigModel.model_validate(form_result).dict()
st.success("Form submitted successfully!")
st.json(validated_data, expanded=True)
except Exception as e:
st.error(f"Validation error: {str(e)}")
else:
st.warning("Form submission failed. Please check the inputs.")
Steps To Reproduce
- Install dependencies from the provided
requirements.txt
. - Save the code as
app.py
. - Run the code using:
streamlit run app.py
Dependencies:
pydantic-core==2.27.2
pydantic==2.10.6
streamlit==1.42.1
streamlit-pydantic==0.6.1-rc.2
pydantic-extra-types==2.10.2
pydantic-settings==2.7.1
Expected Behavior
- The
keys
field should display as a list input with pre-filled values"id1"
,"id2"
. - The
nested_items
field should render forms for each instance of theNestedModel
within a list form.
Current Behavior
- The list input does not appear or behaves incorrectly.
- List of models within
nested_items
are not displayed as expected, and editing or adding new instances is not possible.
Is this a regression?
- Yes, this used to work in a previous version.
Debug info
- OS: Ubuntu 22.04
- Python: 3.9, 3.11
- Streamlit: 1.42.1
- Pydantic: 2.10.6
- streamlit-pydantic: 0.6.1-rc.2, 0.6.1-rc.3
Additional Information
Please advise on whether this is a compatibility issue or requires additional configuration. 😊
Metadata
Metadata
Assignees
Labels
status:needs-triageHas not been triaged yetHas not been triaged yettype:bugSomething isn't workingSomething isn't working