Code

Ticket #17122: 2011.10.26_2020_EST.diff

File 2011.10.26_2020_EST.diff, 1.9 KB (added by nickname123, 2 years ago)

patch to add support for ForeignKey and ManyToMany relations

Line 
1Index: django/contrib/admin/widgets.py
2===================================================================
3--- django/contrib/admin/widgets.py     (revision 17042)
4+++ django/contrib/admin/widgets.py     (working copy)
5@@ -130,6 +130,10 @@
6 
7     def render(self, name, value, attrs=None):
8         rel_to = self.rel.to
9+        # custom fields may need the to_python
10+        # conversion in order to facilitate
11+        # unicode conversion
12+        value = rel_to._meta.pk.to_python(value)
13         if attrs is None:
14             attrs = {}
15         extra = []
16@@ -139,7 +143,7 @@
17                                     (rel_to._meta.app_label,
18                                     rel_to._meta.module_name),
19                                     current_app=self.admin_site.name)
20-
21+       
22             params = self.url_parameters()
23             if params:
24                 url = u'?' + u'&'.join([u'%s=%s' % (k, v) for k, v in params.items()])
25Index: django/forms/forms.py
26===================================================================
27--- django/forms/forms.py       (revision 17042)
28+++ django/forms/forms.py       (working copy)
29@@ -341,6 +341,14 @@
30                     hidden_widget = field.hidden_widget()
31                     initial_value = hidden_widget.value_from_datadict(
32                         self.data, self.files, initial_prefixed_name)
33+                # custom fields may need the to_python
34+                # conversion in order to facilitate
35+                # unicode conversion
36+                if isinstance(initial_value,list):
37+                    # ManyToManyField uses a list
38+                    initial_value = [field.to_python(v) for v in initial_value]
39+                else:
40+                    initial_value = field.to_python(initial_value)
41                 if field.widget._has_changed(initial_value, data_value):
42                     self._changed_data.append(name)
43         return self._changed_data