Re: How to reference model instance fields dynamically

2012-10-26 Thread Chris Pagnutti
Indeed.  Was trying that, but wasn't working on account of me forgetting to 
save inst first.  It's all good now.  Thanks a mil Brad.  All the best.

On Friday, October 26, 2012 11:37:36 AM UTC-4, Chris Pagnutti wrote:
>
> Say I have a model like
> class MyModel(models.Model)
>name = models.CharField(max_length=100)
>number = models.IntegerField()
>
> In a script, I want to have something like
> fields = {"name":"Joe", "number":5}
>
> And I want to update a MyModel instance using the fields dictionary, 
> something like this
> inst = MyModel.objects.get(pk=2)
> for k,v in fields.iteritems():
>inst.k = v   # I tried with inst.F(k) = v and inst.eval(k) = v but 
> python doesn't like that either
>
> I hope I'm being clear in what I'm trying to do.  The reason I have to do 
> it this way is that I don't know which model, and therefore fields, I'm 
> dealing with until run-time.
> Please ask questions if this isn't clear.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/i1e5JjDl45MJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Re: How to reference model instance fields dynamically

2012-10-26 Thread Brad Pitcher
Use setattr's counterpart, getattr :-)

getattr(inst, k).add(relatedObject)

On Fri, Oct 26, 2012 at 5:16 PM, Chris Pagnutti wrote:

> Awesome.  Thanks Brad.  Now the question is, what if the attribute is a
> ManyToManyField.
>
> e.g.
> inst.k.add(relatedObject)
>
> How to reference k properly if k is a string containing the name of a
> ManyToManyField of inst?
>
>
> On Friday, October 26, 2012 11:37:36 AM UTC-4, Chris Pagnutti wrote:
>>
>> Say I have a model like
>> class MyModel(models.Model)
>>name = models.CharField(max_length=**100)
>>number = models.IntegerField()
>>
>> In a script, I want to have something like
>> fields = {"name":"Joe", "number":5}
>>
>> And I want to update a MyModel instance using the fields dictionary,
>> something like this
>> inst = MyModel.objects.get(pk=2)
>> for k,v in fields.iteritems():
>>inst.k = v   # I tried with inst.F(k) = v and inst.eval(k) = v but
>> python doesn't like that either
>>
>> I hope I'm being clear in what I'm trying to do.  The reason I have to do
>> it this way is that I don't know which model, and therefore fields, I'm
>> dealing with until run-time.
>> Please ask questions if this isn't clear.
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/Rvpb5l-sbaQJ.
>
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Re: How to reference model instance fields dynamically

2012-10-26 Thread Chris Pagnutti
Awesome.  Thanks Brad.  Now the question is, what if the attribute is a 
ManyToManyField.

e.g.
inst.k.add(relatedObject)

How to reference k properly if k is a string containing the name of a 
ManyToManyField of inst?

On Friday, October 26, 2012 11:37:36 AM UTC-4, Chris Pagnutti wrote:
>
> Say I have a model like
> class MyModel(models.Model)
>name = models.CharField(max_length=100)
>number = models.IntegerField()
>
> In a script, I want to have something like
> fields = {"name":"Joe", "number":5}
>
> And I want to update a MyModel instance using the fields dictionary, 
> something like this
> inst = MyModel.objects.get(pk=2)
> for k,v in fields.iteritems():
>inst.k = v   # I tried with inst.F(k) = v and inst.eval(k) = v but 
> python doesn't like that either
>
> I hope I'm being clear in what I'm trying to do.  The reason I have to do 
> it this way is that I don't know which model, and therefore fields, I'm 
> dealing with until run-time.
> Please ask questions if this isn't clear.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/Rvpb5l-sbaQJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Re: How to reference model instance fields dynamically

2012-10-26 Thread Brad Pitcher
You can use python's setattr function to do this:

for k,v in fields.iteritems():
setattr(inst, k, v)

On Fri, Oct 26, 2012 at 8:37 AM, Chris Pagnutti wrote:

> Say I have a model like
> class MyModel(models.Model)
>name = models.CharField(max_length=100)
>number = models.IntegerField()
>
> In a script, I want to have something like
> fields = {"name":"Joe", "number":5}
>
> And I want to update a MyModel instance using the fields dictionary,
> something like this
> inst = MyModel.objects.get(pk=2)
> for k,v in fields.iteritems():
>inst.k = v   # I tried with inst.F(k) = v and inst.eval(k) = v but
> python doesn't like that either
>
> I hope I'm being clear in what I'm trying to do.  The reason I have to do
> it this way is that I don't know which model, and therefore fields, I'm
> dealing with until run-time.
> Please ask questions if this isn't clear.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/4ZtEPAjlksQJ.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



How to reference model instance fields dynamically

2012-10-26 Thread Chris Pagnutti
Say I have a model like
class MyModel(models.Model)
   name = models.CharField(max_length=100)
   number = models.IntegerField()

In a script, I want to have something like
fields = {"name":"Joe", "number":5}

And I want to update a MyModel instance using the fields dictionary, 
something like this
inst = MyModel.objects.get(pk=2)
for k,v in fields.iteritems():
   inst.k = v   # I tried with inst.F(k) = v and inst.eval(k) = v but 
python doesn't like that either

I hope I'm being clear in what I'm trying to do.  The reason I have to do 
it this way is that I don't know which model, and therefore fields, I'm 
dealing with until run-time.
Please ask questions if this isn't clear.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/4ZtEPAjlksQJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.