Dany:
from django.db import models
class MyModel(models.Model):
...
owners = models.CharField(max_length=255, blank=False)
gdzie owners
to lista adresów e-mail oddzielonych od siebie rurami.
Na stronie znajduje się wiele <input>
pola o tym samym name
, więc serwer otrzymuje wartości w tablicy.
Kod HTML formularza został sporządzony osobiście i nie zawiera wbudowanych szablonów (takich jak form.as_p
).
Czy Django może ModelForm
s obsłużyć coś takiego?
Jaka jest właściwa lokalizacja do przetwarzania transformacji danych, zarówno podczas pobierania modelu (czy muszę wprowadzić niestandardowy models.Manager
?) i podczas zapisywania (co save()
metoda czy przesłonię? Model
"s lub ModelForm
"s)?
--UPDATA DO WYJAŚNIENIA--
W bazie danych:
+-----+---------------------------+-----+
| ... | owners | ... |
+-----+---------------------------+-----+
| ... | "a@a.com|b@b.com|c@c.com" | ... |
+-----+---------------------------+-----+
Formularz:
<form ... >
...
<input type="text" name="owners" />
<input type="text" name="owners" />
<input type="text" name="owners" />
...
</form>
Odpowiedzi:
8 dla odpowiedzi № 1Możesz użyć forms.MultiValueField
i forms.MultiWidget
. MultiValueField
wie, że pole twojego modelu zawiera wiele dyskretnych wartości i MultiWidget
Widżet wie, jak należy prezentować każdą dyskretną wartość. Zajmą się tworzeniem niepowtarzalnych nazw dla twoich pól, aby mogli zrekonstruować formularz POST
wartości i nie będziesz musiał przesłonić żadnych metod formularza, które zapewniają implementację, tzn. nie będziesz musiał przesłonić save()
.
Jak widać, oficjalni doktorzy są nieco szczuplina temat. Sugeruję, abyś rzucił okiem na kod, aby dowiedzieć się, jak wszystko jest podłączone i co jest wywoływane, ponieważ twoje wymagania zawsze będą wymagać unikalnego rozwiązania, tj .: ile e-maili będzie zawierać to pole? Dokładnie dwa, więc mogę określić dwa CharField
widżety ręcznie, czy będzie to między 0-2, więc muszę dynamicznie konstruować wszystko w zależności od przekazanej wartości? Jeśli potrzebujesz dobrego przykładu jako punktu odniesienia, sprawdź to pytanie SO który zawiera czyste i łatwe do naśladowania wdrożenie.
Idealnie, będziesz chciał mieć PipedEmailAddressesField
to się rozszerza CharField
jako pole twojego modelu, takie, które wie, że przechowuje wyprowadzone adresy e-mail. Powinien być w stanie skonstruować to samodzielnie MultiValueField
pole formularza, które z kolei powinno je skonstruować MultiWidget
pole.
1 dla odpowiedzi nr 2
Oto przykład zapisania modelu w widoku:
http://themorgue.org/blog/2008/05/14/django-and-modelform/
Możesz uzyskać dodatkowe pola ręcznie przy użyciu request.POST["fieldname"]
Mam nadzieję, że to pomogło.