Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
django-taggit
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9b0c9d46
authored
Aug 10, 2014
by
Daniel Hahler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
flake8 fixes
parent
0591e1fa
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
47 additions
and
39 deletions
+47
-39
taggit/forms.py
+5
-2
taggit/managers.py
+21
-15
taggit/models.py
+2
-2
taggit/views.py
+0
-1
tests/forms.py
+1
-1
tests/tests.py
+18
-18
No files found.
taggit/forms.py
View file @
9b0c9d46
...
@@ -10,9 +10,11 @@ from taggit.utils import parse_tags, edit_string_for_tags
...
@@ -10,9 +10,11 @@ from taggit.utils import parse_tags, edit_string_for_tags
class
TagWidget
(
forms
.
TextInput
):
class
TagWidget
(
forms
.
TextInput
):
def
render
(
self
,
name
,
value
,
attrs
=
None
):
def
render
(
self
,
name
,
value
,
attrs
=
None
):
if
value
is
not
None
and
not
isinstance
(
value
,
six
.
string_types
):
if
value
is
not
None
and
not
isinstance
(
value
,
six
.
string_types
):
value
=
edit_string_for_tags
([
o
.
tag
for
o
in
value
.
select_related
(
"tag"
)])
value
=
edit_string_for_tags
([
o
.
tag
for
o
in
value
.
select_related
(
"tag"
)])
return
super
(
TagWidget
,
self
)
.
render
(
name
,
value
,
attrs
)
return
super
(
TagWidget
,
self
)
.
render
(
name
,
value
,
attrs
)
class
TagField
(
forms
.
CharField
):
class
TagField
(
forms
.
CharField
):
widget
=
TagWidget
widget
=
TagWidget
...
@@ -21,4 +23,5 @@ class TagField(forms.CharField):
...
@@ -21,4 +23,5 @@ class TagField(forms.CharField):
try
:
try
:
return
parse_tags
(
value
)
return
parse_tags
(
value
)
except
ValueError
:
except
ValueError
:
raise
forms
.
ValidationError
(
_
(
"Please provide a comma-separated list of tags."
))
raise
forms
.
ValidationError
(
_
(
"Please provide a comma-separated list of tags."
))
taggit/managers.py
View file @
9b0c9d46
...
@@ -102,7 +102,7 @@ class _TaggableManager(models.Manager):
...
@@ -102,7 +102,7 @@ class _TaggableManager(models.Manager):
else
'content_object'
)
else
'content_object'
)
fk
=
self
.
through
.
_meta
.
get_field
(
fieldname
)
fk
=
self
.
through
.
_meta
.
get_field
(
fieldname
)
query
=
{
query
=
{
'
%
s__
%
s__in'
%
(
self
.
through
.
tag_relname
(),
fk
.
name
)
:
'
%
s__
%
s__in'
%
(
self
.
through
.
tag_relname
(),
fk
.
name
):
set
(
obj
.
_get_pk_val
()
for
obj
in
instances
)
set
(
obj
.
_get_pk_val
()
for
obj
in
instances
)
}
}
join_table
=
self
.
through
.
_meta
.
db_table
join_table
=
self
.
through
.
_meta
.
db_table
...
@@ -110,8 +110,8 @@ class _TaggableManager(models.Manager):
...
@@ -110,8 +110,8 @@ class _TaggableManager(models.Manager):
connection
=
connections
[
db
]
connection
=
connections
[
db
]
qn
=
connection
.
ops
.
quote_name
qn
=
connection
.
ops
.
quote_name
qs
=
self
.
get_queryset
()
.
using
(
db
)
.
_next_is_sticky
()
.
filter
(
**
query
)
.
extra
(
qs
=
self
.
get_queryset
()
.
using
(
db
)
.
_next_is_sticky
()
.
filter
(
**
query
)
.
extra
(
select
=
{
select
=
{
'_prefetch_related_val'
:
'
%
s.
%
s'
%
(
qn
(
join_table
),
qn
(
source_col
))
'_prefetch_related_val'
:
'
%
s.
%
s'
%
(
qn
(
join_table
),
qn
(
source_col
))
}
}
)
)
return
(
qs
,
return
(
qs
,
...
@@ -220,10 +220,12 @@ class _TaggableManager(models.Manager):
...
@@ -220,10 +220,12 @@ class _TaggableManager(models.Manager):
class
TaggableManager
(
RelatedField
,
Field
):
class
TaggableManager
(
RelatedField
,
Field
):
_related_name_counter
=
0
_related_name_counter
=
0
def
__init__
(
self
,
verbose_name
=
_
(
"Tags"
),
help_text
=
_
(
"A comma-separated list of tags."
),
def
__init__
(
self
,
verbose_name
=
_
(
"Tags"
),
through
=
None
,
blank
=
False
,
related_name
=
None
,
to
=
None
,
help_text
=
_
(
"A comma-separated list of tags."
),
manager
=
_TaggableManager
):
through
=
None
,
blank
=
False
,
related_name
=
None
,
to
=
None
,
Field
.
__init__
(
self
,
verbose_name
=
verbose_name
,
help_text
=
help_text
,
blank
=
blank
,
null
=
True
,
serialize
=
False
)
manager
=
_TaggableManager
):
Field
.
__init__
(
self
,
verbose_name
=
verbose_name
,
help_text
=
help_text
,
blank
=
blank
,
null
=
True
,
serialize
=
False
)
self
.
through
=
through
or
TaggedItem
self
.
through
=
through
or
TaggedItem
self
.
rel
=
TaggableRel
(
self
,
related_name
,
self
.
through
,
to
=
to
)
self
.
rel
=
TaggableRel
(
self
,
related_name
,
self
.
through
,
to
=
to
)
self
.
swappable
=
False
self
.
swappable
=
False
...
@@ -233,12 +235,12 @@ class TaggableManager(RelatedField, Field):
...
@@ -233,12 +235,12 @@ class TaggableManager(RelatedField, Field):
def
__get__
(
self
,
instance
,
model
):
def
__get__
(
self
,
instance
,
model
):
if
instance
is
not
None
and
instance
.
pk
is
None
:
if
instance
is
not
None
and
instance
.
pk
is
None
:
raise
ValueError
(
"
%
s objects need to have a primary key value "
raise
ValueError
(
"
%
s objects need to have a primary key value "
"before you can access their tags."
%
model
.
__name__
)
"before you can access their tags."
%
model
.
__name__
)
manager
=
self
.
manager
(
manager
=
self
.
manager
(
through
=
self
.
through
,
through
=
self
.
through
,
model
=
model
,
model
=
model
,
instance
=
instance
,
instance
=
instance
,
prefetch_cache_name
=
self
.
name
prefetch_cache_name
=
self
.
name
)
)
return
manager
return
manager
...
@@ -287,7 +289,6 @@ class TaggableManager(RelatedField, Field):
...
@@ -287,7 +289,6 @@ class TaggableManager(RelatedField, Field):
else
:
else
:
self
.
post_through_setup
(
cls
)
self
.
post_through_setup
(
cls
)
def
__lt__
(
self
,
other
):
def
__lt__
(
self
,
other
):
"""
"""
Required contribute_to_class as Django uses bisect
Required contribute_to_class as Django uses bisect
...
@@ -364,7 +365,7 @@ class TaggableManager(RelatedField, Field):
...
@@ -364,7 +365,7 @@ class TaggableManager(RelatedField, Field):
def
extra_filters
(
self
,
pieces
,
pos
,
negate
):
def
extra_filters
(
self
,
pieces
,
pos
,
negate
):
if
negate
or
not
self
.
use_gfk
:
if
negate
or
not
self
.
use_gfk
:
return
[]
return
[]
prefix
=
"__"
.
join
([
"tagged_items"
]
+
pieces
[:
pos
-
2
])
prefix
=
"__"
.
join
([
"tagged_items"
]
+
pieces
[:
pos
-
2
])
get
=
ContentType
.
objects
.
get_for_model
get
=
ContentType
.
objects
.
get_for_model
cts
=
[
get
(
obj
)
for
obj
in
_get_subclasses
(
self
.
model
)]
cts
=
[
get
(
obj
)
for
obj
in
_get_subclasses
(
self
.
model
)]
if
len
(
cts
)
==
1
:
if
len
(
cts
)
==
1
:
...
@@ -378,13 +379,18 @@ class TaggableManager(RelatedField, Field):
...
@@ -378,13 +379,18 @@ class TaggableManager(RelatedField, Field):
else
:
else
:
alias_to_join
=
lhs_alias
alias_to_join
=
lhs_alias
extra_col
=
self
.
through
.
_meta
.
get_field_by_name
(
'content_type'
)[
0
]
.
column
extra_col
=
self
.
through
.
_meta
.
get_field_by_name
(
'content_type'
)[
0
]
.
column
content_type_ids
=
[
ContentType
.
objects
.
get_for_model
(
subclass
)
.
pk
for
subclass
in
_get_subclasses
(
self
.
model
)]
content_type_ids
=
[
ContentType
.
objects
.
get_for_model
(
subclass
)
.
pk
for
subclass
in
_get_subclasses
(
self
.
model
)]
if
len
(
content_type_ids
)
==
1
:
if
len
(
content_type_ids
)
==
1
:
content_type_id
=
content_type_ids
[
0
]
content_type_id
=
content_type_ids
[
0
]
extra_where
=
" AND
%
s.
%
s =
%%
s"
%
(
qn
(
alias_to_join
),
qn
(
extra_col
))
extra_where
=
" AND
%
s.
%
s =
%%
s"
%
(
qn
(
alias_to_join
),
qn
(
extra_col
))
params
=
[
content_type_id
]
params
=
[
content_type_id
]
else
:
else
:
extra_where
=
" AND
%
s.
%
s IN (
%
s)"
%
(
qn
(
alias_to_join
),
qn
(
extra_col
),
','
.
join
([
'
%
s'
]
*
len
(
content_type_ids
)))
extra_where
=
" AND
%
s.
%
s IN (
%
s)"
%
(
qn
(
alias_to_join
),
qn
(
extra_col
),
','
.
join
([
'
%
s'
]
*
len
(
content_type_ids
)))
params
=
content_type_ids
params
=
content_type_ids
return
extra_where
,
params
return
extra_where
,
params
...
@@ -461,7 +467,7 @@ def _get_subclasses(model):
...
@@ -461,7 +467,7 @@ def _get_subclasses(model):
for
f
in
model
.
_meta
.
get_all_field_names
():
for
f
in
model
.
_meta
.
get_all_field_names
():
field
=
model
.
_meta
.
get_field_by_name
(
f
)[
0
]
field
=
model
.
_meta
.
get_field_by_name
(
f
)[
0
]
if
(
isinstance
(
field
,
RelatedObject
)
and
if
(
isinstance
(
field
,
RelatedObject
)
and
getattr
(
field
.
field
.
rel
,
"parent_link"
,
None
)):
getattr
(
field
.
field
.
rel
,
"parent_link"
,
None
)):
subclasses
.
extend
(
_get_subclasses
(
field
.
model
))
subclasses
.
extend
(
_get_subclasses
(
field
.
model
))
return
subclasses
return
subclasses
...
...
taggit/models.py
View file @
9b0c9d46
...
@@ -59,7 +59,7 @@ class TagBase(models.Model):
...
@@ -59,7 +59,7 @@ class TagBase(models.Model):
except
IntegrityError
:
except
IntegrityError
:
pass
pass
# Now try to find existing slugs with similar names
# Now try to find existing slugs with similar names
slugs
=
set
(
Tag
.
objects
.
filter
(
slug__startswith
=
self
.
slug
)
\
slugs
=
set
(
Tag
.
objects
.
filter
(
slug__startswith
=
self
.
slug
)
.
values_list
(
'slug'
,
flat
=
True
))
.
values_list
(
'slug'
,
flat
=
True
))
i
=
1
i
=
1
while
True
:
while
True
:
...
@@ -145,7 +145,7 @@ class GenericTaggedItemBase(ItemBase):
...
@@ -145,7 +145,7 @@ class GenericTaggedItemBase(ItemBase):
content_object
=
GenericForeignKey
()
content_object
=
GenericForeignKey
()
class
Meta
:
class
Meta
:
abstract
=
True
abstract
=
True
@classmethod
@classmethod
def
lookup_kwargs
(
cls
,
instance
):
def
lookup_kwargs
(
cls
,
instance
):
...
...
taggit/views.py
View file @
9b0c9d46
...
@@ -18,4 +18,3 @@ def tagged_object_list(request, slug, queryset, **kwargs):
...
@@ -18,4 +18,3 @@ def tagged_object_list(request, slug, queryset, **kwargs):
kwargs
[
"extra_context"
]
=
{}
kwargs
[
"extra_context"
]
=
{}
kwargs
[
"extra_context"
][
"tag"
]
=
tag
kwargs
[
"extra_context"
][
"tag"
]
=
tag
return
ListView
.
as_view
(
request
,
qs
,
**
kwargs
)
return
ListView
.
as_view
(
request
,
qs
,
**
kwargs
)
tests/forms.py
View file @
9b0c9d46
...
@@ -6,7 +6,7 @@ from .models import Food, DirectFood, CustomPKFood, OfficialFood
...
@@ -6,7 +6,7 @@ from .models import Food, DirectFood, CustomPKFood, OfficialFood
fields
=
None
fields
=
None
if
VERSION
>=
(
1
,
6
):
if
VERSION
>=
(
1
,
6
):
fields
=
'__all__'
fields
=
'__all__'
...
...
tests/tests.py
View file @
9b0c9d46
...
@@ -109,7 +109,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -109,7 +109,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
def
test_add_tag
(
self
):
def
test_add_tag
(
self
):
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
self
.
assertEqual
(
list
(
apple
.
tags
.
all
()),
[])
self
.
assertEqual
(
list
(
apple
.
tags
.
all
()),
[])
self
.
assertEqual
(
list
(
self
.
food_model
.
tags
.
all
()),
[])
self
.
assertEqual
(
list
(
self
.
food_model
.
tags
.
all
()),
[])
apple
.
tags
.
add
(
'green'
)
apple
.
tags
.
add
(
'green'
)
self
.
assert_tags_equal
(
apple
.
tags
.
all
(),
[
'green'
])
self
.
assert_tags_equal
(
apple
.
tags
.
all
(),
[
'green'
])
...
@@ -150,7 +150,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -150,7 +150,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
# make sure we don't double create.
# make sure we don't double create.
# + 12 on Django 1.6 for save points.
# + 12 on Django 1.6 for save points.
queries
=
22
queries
=
22
if
django
.
VERSION
<
(
1
,
6
):
if
django
.
VERSION
<
(
1
,
6
):
queries
-=
12
queries
-=
12
self
.
assertNumQueries
(
queries
,
apple
.
tags
.
add
,
"red"
,
"delicious"
,
"green"
)
self
.
assertNumQueries
(
queries
,
apple
.
tags
.
add
,
"red"
,
"delicious"
,
"green"
)
...
@@ -160,7 +160,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -160,7 +160,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
# make sure we dont't double create.
# make sure we dont't double create.
# + 4 on Django 1.6 for save points.
# + 4 on Django 1.6 for save points.
queries
=
9
queries
=
9
if
django
.
VERSION
<
(
1
,
6
):
if
django
.
VERSION
<
(
1
,
6
):
queries
-=
4
queries
-=
4
self
.
assertNumQueries
(
queries
,
pear
.
tags
.
add
,
"green"
,
"delicious"
)
self
.
assertNumQueries
(
queries
,
pear
.
tags
.
add
,
"green"
,
"delicious"
)
...
@@ -181,7 +181,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -181,7 +181,7 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
def
test_delete_bulk
(
self
):
def
test_delete_bulk
(
self
):
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
kitty
=
self
.
pet_model
.
objects
.
create
(
pk
=
apple
.
pk
,
name
=
"kitty"
)
kitty
=
self
.
pet_model
.
objects
.
create
(
pk
=
apple
.
pk
,
name
=
"kitty"
)
apple
.
tags
.
add
(
"red"
,
"delicious"
,
"fruit"
)
apple
.
tags
.
add
(
"red"
,
"delicious"
,
"fruit"
)
kitty
.
tags
.
add
(
"feline"
)
kitty
.
tags
.
add
(
"feline"
)
...
@@ -222,9 +222,9 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -222,9 +222,9 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
pks
=
self
.
pet_model
.
objects
.
filter
(
tags__name__in
=
[
"fuzzy"
])
pks
=
self
.
pet_model
.
objects
.
filter
(
tags__name__in
=
[
"fuzzy"
])
model_name
=
self
.
pet_model
.
__name__
model_name
=
self
.
pet_model
.
__name__
self
.
assertQuerysetEqual
(
pks
,
self
.
assertQuerysetEqual
(
pks
,
[
'<{0}: kitty>'
.
format
(
model_name
),
[
'<{0}: kitty>'
.
format
(
model_name
),
'<{0}: cat>'
.
format
(
model_name
)],
'<{0}: cat>'
.
format
(
model_name
)],
ordered
=
False
)
ordered
=
False
)
def
test_lookup_bulk
(
self
):
def
test_lookup_bulk
(
self
):
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
apple
=
self
.
food_model
.
objects
.
create
(
name
=
"apple"
)
...
@@ -254,14 +254,14 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -254,14 +254,14 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
pear
=
self
.
food_model
.
objects
.
create
(
name
=
"pear"
)
pear
=
self
.
food_model
.
objects
.
create
(
name
=
"pear"
)
pear
.
tags
.
add
(
"green"
,
"delicious"
)
pear
.
tags
.
add
(
"green"
,
"delicious"
)
guava
=
self
.
food_model
.
objects
.
create
(
name
=
"guava"
)
self
.
food_model
.
objects
.
create
(
name
=
"guava"
)
pks
=
self
.
food_model
.
objects
.
exclude
(
tags__name__in
=
[
"red"
])
pks
=
self
.
food_model
.
objects
.
exclude
(
tags__name__in
=
[
"red"
])
model_name
=
self
.
food_model
.
__name__
model_name
=
self
.
food_model
.
__name__
self
.
assertQuerysetEqual
(
pks
,
self
.
assertQuerysetEqual
(
pks
,
[
'<{0}: pear>'
.
format
(
model_name
),
[
'<{0}: pear>'
.
format
(
model_name
),
'<{0}: guava>'
.
format
(
model_name
)],
'<{0}: guava>'
.
format
(
model_name
)],
ordered
=
False
)
ordered
=
False
)
def
test_similarity_by_tag
(
self
):
def
test_similarity_by_tag
(
self
):
"""Test that pears are more similar to apples than watermelons"""
"""Test that pears are more similar to apples than watermelons"""
...
@@ -293,8 +293,8 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
...
@@ -293,8 +293,8 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
'
%
s__name'
%
_model_name
(
self
.
pet_model
):
'Spot'
'
%
s__name'
%
_model_name
(
self
.
pet_model
):
'Spot'
}
}
self
.
assert_tags_equal
(
self
.
assert_tags_equal
(
self
.
tag_model
.
objects
.
filter
(
**
lookup_kwargs
),
self
.
tag_model
.
objects
.
filter
(
**
lookup_kwargs
),
[
'scary'
]
[
'scary'
]
)
)
def
test_taggeditem_unicode
(
self
):
def
test_taggeditem_unicode
(
self
):
...
@@ -492,7 +492,7 @@ class TagStringParseTestCase(UnitTestCase):
...
@@ -492,7 +492,7 @@ class TagStringParseTestCase(UnitTestCase):
self
.
assertEqual
(
parse_tags
(
',one two'
),
[
'one two'
])
self
.
assertEqual
(
parse_tags
(
',one two'
),
[
'one two'
])
self
.
assertEqual
(
parse_tags
(
',one two three'
),
[
'one two three'
])
self
.
assertEqual
(
parse_tags
(
',one two three'
),
[
'one two three'
])
self
.
assertEqual
(
parse_tags
(
'a-one, a-two and a-three'
),
self
.
assertEqual
(
parse_tags
(
'a-one, a-two and a-three'
),
[
'a-one'
,
'a-two and a-three'
])
[
'a-one'
,
'a-two and a-three'
])
def
test_with_double_quoted_multiple_words
(
self
):
def
test_with_double_quoted_multiple_words
(
self
):
"""
"""
...
@@ -504,7 +504,7 @@ class TagStringParseTestCase(UnitTestCase):
...
@@ -504,7 +504,7 @@ class TagStringParseTestCase(UnitTestCase):
self
.
assertEqual
(
parse_tags
(
'"one two three'
),
[
'one'
,
'three'
,
'two'
])
self
.
assertEqual
(
parse_tags
(
'"one two three'
),
[
'one'
,
'three'
,
'two'
])
self
.
assertEqual
(
parse_tags
(
'"one two"'
),
[
'one two'
])
self
.
assertEqual
(
parse_tags
(
'"one two"'
),
[
'one two'
])
self
.
assertEqual
(
parse_tags
(
'a-one "a-two and a-three"'
),
self
.
assertEqual
(
parse_tags
(
'a-one "a-two and a-three"'
),
[
'a-one'
,
'a-two and a-three'
])
[
'a-one'
,
'a-two and a-three'
])
def
test_with_no_loose_commas
(
self
):
def
test_with_no_loose_commas
(
self
):
"""
"""
...
@@ -523,9 +523,9 @@ class TagStringParseTestCase(UnitTestCase):
...
@@ -523,9 +523,9 @@ class TagStringParseTestCase(UnitTestCase):
Double quotes can contain commas
Double quotes can contain commas
"""
"""
self
.
assertEqual
(
parse_tags
(
'a-one "a-two, and a-three"'
),
self
.
assertEqual
(
parse_tags
(
'a-one "a-two, and a-three"'
),
[
'a-one'
,
'a-two, and a-three'
])
[
'a-one'
,
'a-two, and a-three'
])
self
.
assertEqual
(
parse_tags
(
'"two", one, one, two, "one"'
),
self
.
assertEqual
(
parse_tags
(
'"two", one, one, two, "one"'
),
[
'one'
,
'two'
])
[
'one'
,
'two'
])
def
test_with_naughty_input
(
self
):
def
test_with_naughty_input
(
self
):
"""
"""
...
@@ -540,7 +540,7 @@ class TagStringParseTestCase(UnitTestCase):
...
@@ -540,7 +540,7 @@ class TagStringParseTestCase(UnitTestCase):
self
.
assertEqual
(
parse_tags
(
',,,,,,'
),
[])
self
.
assertEqual
(
parse_tags
(
',,,,,,'
),
[])
self
.
assertEqual
(
parse_tags
(
'",",",",",",","'
),
[
','
])
self
.
assertEqual
(
parse_tags
(
'",",",",",",","'
),
[
','
])
self
.
assertEqual
(
parse_tags
(
'a-one "a-two" and "a-three'
),
self
.
assertEqual
(
parse_tags
(
'a-one "a-two" and "a-three'
),
[
'a-one'
,
'a-three'
,
'a-two'
,
'and'
])
[
'a-one'
,
'a-three'
,
'a-two'
,
'and'
])
def
test_recreation_of_tag_list_string_representations
(
self
):
def
test_recreation_of_tag_list_string_representations
(
self
):
plain
=
Tag
.
objects
.
create
(
name
=
'plain'
)
plain
=
Tag
.
objects
.
create
(
name
=
'plain'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment