[Django] ModelForm und initial dict mit ForeignKey bug?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Einer ModelForm kann man ja ein initial={} übergeben.
Ist es normal das als value keine Model instanz erlaubt ist? Die werden ignoriert :(

Ich mache das deswegen in der Art:

Code: Alles auswählen

    for attr_name in ("parent", "design", "showlinks", "permitViewGroup", "permitEditGroup"):
        model_attr = getattr(parent_pagetree, attr_name)
        if hasattr(model_attr, "pk"):
            initial_data[attr_name] = model_attr.pk # XXX: A django Bug?
        else:
            initial_data[attr_name] = model_attr

    return initial_data
Btw. direkt eine Instance übergeben geht nicht. Zum einen möchte ich nicht alle Werte vorselektieren und zum anderen setzt sich meine Form aus drei verschiedenen Models zusammen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jakobusrex
User
Beiträge: 10
Registriert: Freitag 9. Oktober 2009, 17:17
Wohnort: Berlin, Deutschland, Europa, Erde, Universum, ?...

SomeModelForm(instance=some_instance)

müsste auch mit mehreren models gehen, sofern diese mit schlüsseln verbunden sind, dann automatisch.

z.b. mein form ist mit "User" verknüpft, das feld wird problemlos gesetzt.

[list=1]
[*]In den Laden gehen
[*]Einen neuen Computer kaufen
[*]Den Computer verfluchen, wenn er nicht mehr geht
[/list]
Benutzeravatar
jakobusrex
User
Beiträge: 10
Registriert: Freitag 9. Oktober 2009, 17:17
Wohnort: Berlin, Deutschland, Europa, Erde, Universum, ?...

irgendwie wird mein code nicht richtig angezeigt, ich poste das trotzdem mal als beispiel

model

Code: Alles auswählen

class user_annotation_image_tags(models.Model):
    user = models.ForeignKey(User, unique=False)
    tag = models.CharField(max_length=255)
    
    class Meta:
        db_table = 'dta2_user_annotation_image_tags'
    
    def __unicode__(self):
        return self.tag

#annotation            
class user_annotation_image(models.Model):
    user = models.ForeignKey(User, unique=False)
    page = models.ForeignKey(page, unique=False)
    link = models.CharField(max_length=255)
    comment = models.CharField(max_length=255)
    user_annotation_image_tags = models.ForeignKey(user_annotation_image_tags, unique=False)

    class Meta:
        db_table = 'dta2_user_annotation_image'

    def comment_10_dotted(self):
        if len(self.comment) > 10:
            return self.comment[0:10] + '...' 
        return self.comment
        
    def __unicode__(self):
        return str(self.user)
form

Code: Alles auswählen

class AnnotationForm(forms.ModelForm):
    user = forms.ModelChoiceField(queryset=User.objects.all(),
            widget=forms.HiddenInput())
    page = forms.ModelChoiceField(queryset=page.objects.all(),
            widget=forms.HiddenInput())

    link = forms.TextInput()
    comment = forms.CharField(required = False, widget=forms.Textarea(attrs={'cols': 50, 'rows': 5, 'style':"width:200px;height:40px;"}))
    user_annotation_image_tags = forms.CharField()

    class Meta:
    	model = user_annotation_image
instanziieren

Code: Alles auswählen

form = AnnotationForm(instance=user_annotation_image_instanz)
Antworten