0001-delete-old-values-when-set-new-multiple-attribute-va.patch
src/authentic2/models.py | ||
---|---|---|
213 | 213 |
if self.multiple: |
214 | 214 |
assert isinstance(value, (list, set, tuple)) |
215 | 215 |
values = value |
216 |
content_list = [] |
|
216 | 217 |
for value in values: |
217 | 218 |
content = serialize(value) |
218 | 219 |
av, created = AttributeValue.objects.get_or_create( |
... | ... | |
225 | 226 |
if not created: |
226 | 227 |
av.verified = verified |
227 | 228 |
av.save() |
229 |
content_list.append(content) |
|
230 | ||
231 |
AttributeValue.objects.filter( |
|
232 |
attribute=self, |
|
233 |
content_type=ContentType.objects.get_for_model(owner), |
|
234 |
object_id=owner.pk, |
|
235 |
multiple=True |
|
236 |
).exclude(content__in=content_list).delete() |
|
228 | 237 |
else: |
229 | 238 |
content = serialize(value) |
230 | 239 |
av, created = AttributeValue.objects.get_or_create( |
tests/test_attribute_kinds.py | ||
---|---|---|
447 | 447 |
response = app.get('/accounts/edit/') |
448 | 448 |
form = response.form |
449 | 449 |
assert form['edit-profile-cityscape_image'].attrs['accept'] == 'image/*' |
450 | ||
451 | ||
452 |
def test_multiple_attribute_setter(db, app, simple_user): |
|
453 |
nicks = Attribute.objects.create(name='nicknames', label='Nicknames', kind='string', |
|
454 |
required=False, multiple=True, user_visible=True, user_editable=True) |
|
455 | ||
456 |
simple_user.attributes.nicknames = ['Roger', 'Tony', 'Robie'] |
|
457 |
simple_user.save() |
|
458 |
assert 'Tony' in [atv.content for atv in simple_user.attribute_values.filter(attribute=nicks)] |
|
459 | ||
460 |
simple_user.attributes.nicknames = ['Roger', 'Timmy', 'Robie'] |
|
461 |
simple_user.save() |
|
462 |
assert not 'Tony' in [atv.content for atv in simple_user.attribute_values.filter(attribute=nicks)] |
|
450 |
- |