After creating a model with several crab-like elements I could not avoid going for an actual crab. Very little was retained from the previous build. I only reused the setup for the claws, replacing the small pincers with large ones using the curved wedge parts. I chose to make one larger than the other, as some crabs have them like that. However, it's an easy exchange to to make them identical. I thought it looked more interesting to have them different.
With several dark red sea creatures in the official models of this set, the obvious choice was to go for a dark red crab as well. There were various approaches but in the end it all came down to parts economy. I had to ensure that I would have enough parts to cover the top. The underside I could ignore and just use the plenty amount of gray plates for that section.
Do the complicated parts first is my adage so I went for the legs first. It was obvious that using the round plates would be essential for the shape. This was also enforced by the fact that I had already used four pairs of the stronger hinge parts on the claws as I love the greater articulation. The lobster of the official model simply had too simple claws. If I could make them better I would do so. There were also other constraints as the body of a crab is rectangular or ellipsoid. As the set as several round plates they were ideal for placing the legs in a semi-circular pattern, adding to the natural shape. This did mean I could not use them for the top but this was a problem for later. Because the legs needed a semi-circular shape above and below I used the pink semi-circular plate. This also seemed to be a good place to use the bountiful pink 1x1 round plates for extra support.
I made the legs quite strong. I decided the 1x3 slopes were too crude for legs. I had disliked that for the lobster so I went for the 1x2 curved slopes. I added the 1x1 plates with vertical clips as an extension. This looked better all the way even though it cost me some plates.
With two 6x6 circular plates attaching the legs these would need to be part of the core as well. Together they would form the width of the body. I had placed the claws already at the front so they would simply be the next set of limbs I had also put only two layers of plates between the two circular plates. As bricks are three studs wide it seemed I had created a minor complication. This was not helped by the fact that in the interior the circular shape made it more difficult to fill in the gaps.
I devised separate solutions for the front and the back. The width of between the available studs in the gaps was exactly 6, which was exactly the width I could reach for the solution. For the back I used the 1x2 brackets. I chose to use the combination of the one stud upward and downward brackets because these would allow a complete coverage of the open side and allow for a far more solid structure than using just the 2 stud high version. For the back I decided to use the 2x3 curved slopes as I didn't think I could use all of them as I wanted for the top. This would be a loss but I didn't have any good alternative.
For the front section I still have the dark tan 2x6 partially curved plates. These would fit exactly on the ends of the round plates and leave a brick sizes opening on the front where I could create the mouth. Now I also needed to devise how I would place the eyes. I wanted to add some articulation without breaking the shape of the model. To do this I used the 1x1 circular plates with handles to attach the eyes to. The eyes could only look inward but that was fine as that would be more common anyways. They could be place looking directly to the front and that was good enough.
For the top I aimed to make things as symmetrical as possible. The interior would be covered so I could use any bricks there. Things were easily covered using the slopes. Only the very top proved to be problematic. I would need to compromise here. There was no dark red left, but there was still some red and parts with reddish components like pink and dark orange. I made a simple geometric pattern and the result was okay. The dark red was dominant anyways so some lighter touches was fair.
I only had the underside left. In general these are fairly flat so I could simply cover them with gray plates. There was however the 6x6 dish that would allow a slightly more curved underside that would make it look even better. The challenge was on how to attach it upside down. It took quite some time fiddling and trying various combinations. This set has quite some parts I have never used before so I still need to understand how they can be used. The solution I found is very neat and I am much pleased about it.
I had utilized mainly the reddish colored parts and some of the gray and black. In the lobster model Lego had added a small submersible. I still had all the yellow and some plates and brackets. I wondered if I could make a small submersible as well? I knew some things needed to be included to fit the windscreen dome. The main body had to be at least 6x6. The plates remaining were also 6 studs in length so it should be doable. The main problem was that the dome requires a mostly smooth surface to rest upon with the 6x4 plate is smooth in the middle, so the minifig would not be able to stick.
I made the challenging choice to use the 2 stud high brick with sideways studs. I say 2 studs high, but it is actually one plate shorter. I only had one pair which I would need to use on the sides. What followed was a careful placement of plates and bricks to fill up the gaps and make the body sound enough. If I could not do this in a good way the model would fail. Despite my own misgivings I succeeded.
I did make some compromises. I wanted to use the round yellow parts one the sides for the propulsion. I prepared this one first to ensure I would have the necessary parts to attach to the side, else it would be a rather dull submersible. This meant I could not use the plates needed there for the underside. Fortunately I was able to manage it all.
For the front the best way forward was to use the two wheel arches, this time combined together. I kept things fairly simple. For the back the problem is always that the windscreen dome is only attached on one bracket positioned on the top so it comes off easily. To solve this problem I had placed the 1x1 brackets, that I hadn't used yet, on the bottom so I had something to attach bracket to. I had to look for something that worked well. I kept it fairly simply while using the yellow parts meant all outer sides had a consistent yellow section.
The small submersible looks good enough. It is not perfect but the one from the official lobster model is somewhat of a mishmash too, so I can dare to challenge it. The prime model is however the crimson crab. I think it is beautiful and looks stunning, and it blows the lobster model out of the water with its smoother design and greater articulation of parts. It worked out way better than expected even though there were some serious challenges which I needed to solve. There are still some little things I would like to improve but the flaws are very minor. Lego is all about artistic interpretation. It needs to look and feel good and not be an exact replica.
We provide links to third-party stores that sell LEGO products.
If you use these stores, you are not buying from Rebrickable.
Click the button below to search the stores.
default
19.10 ms (37 queries
including 18 similar
and 12 duplicates
)
Query
Timeline
Time (ms)
Action
SELECT "lego_baseset"."id", "lego_baseset"."set_num", "lego_baseset"."name", "lego_baseset"."year", "lego_baseset"."theme_id", "lego_baseset"."set_type", "lego_baseset"."num_parts", "lego_baseset"."default_inventory_id", "lego_baseset"."is_active", "lego_baseset"."is_accessory", "lego_baseset"."added_dt", "lego_baseset"."added_by_id", "lego_baseset"."last_modified_dt", "lego_baseset"."last_modified_by_id", "lego_baseset"."last_checked_for_bi", "lego_baseset"."descr", "lego_baseset"."primary_photo_id", "lego_baseset"."is_gear", "lego_baseset"."is_book", "lego_baseset"."search_vector", "lego_baseset"."mfhash_vector", "lego_moc"."baseset_ptr_id", "lego_moc"."designer_id", "lego_moc"."detail_url", "lego_moc"."gallery_url", "lego_moc"."bi_url", "lego_moc"."cad_url", "lego_moc"."video", "lego_moc"."bi_type", "lego_moc"."is_for_sale", "lego_moc"."is_hosted", "lego_moc"."cost", "lego_moc"."currency_id", "lego_moc"."parent_set_1_id", "lego_moc"."parent_set_2_id", "lego_moc"."parent_set_3_id", "lego_moc"."parent_set_4_id", "lego_moc"."parent_set_5_id", "lego_moc"."parent_inv_1_id", "lego_moc"."parent_inv_2_id", "lego_moc"."parent_inv_3_id", "lego_moc"."parent_inv_4_id", "lego_moc"."parent_inv_5_id", "lego_moc"."parent_type", "lego_moc"."is_allowed_premium", "lego_moc"."is_locked", "lego_moc"."last_social_post", "lego_moc"."is_review_requested", "lego_theme"."id", "lego_theme"."parent_id", "lego_theme"."name", "lego_theme"."slug", "lego_theme"."set_count", "lego_theme"."t1_id", "lego_theme"."t1_name", "lego_theme"."t2_name", "lego_theme"."t3_name", "lego_theme"."lego_blurb", "lego_theme"."banner_img", "lego_theme"."descr", T4."id", T4."parent_id", T4."name", T4."slug", T4."set_count", T4."t1_id", T4."t1_name", T4."t2_name", T4."t3_name", T4."lego_blurb", T4."banner_img", T4."descr", T5."id", T5."parent_id", T5."name", T5."slug", T5."set_count", T5."t1_id", T5."t1_name", T5."t2_name", T5."t3_name", T5."lego_blurb", T5."banner_img", T5."descr", "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", "lego_designer"."user_ptr_id", "lego_designer"."auto_approve", "lego_designer"."num_auto_approved", "lego_designer"."last_checked_for_moc_errors", "accounts_userplan"."user_id", "accounts_userplan"."plan_id", "accounts_userplan"."expiry_date", "accounts_userplan"."last_paid_date", "accounts_userplan"."is_subscription_active", "accounts_userplan"."subscription_period", "accounts_userplan"."payment_source", "accounts_userplan"."stripe_customer_id", "accounts_userplan"."stripe_subscription_id", "accounts_userplan"."paypal_subscription_id", "accounts_userplan"."base_free_plan_id", "accounts_userplan"."is_reminder_sent", "plans_plan"."id", "plans_plan"."type", "plans_plan"."version", "plans_plan"."stripe_id", "plans_plan"."paypal_id", "plans_plan"."cost_single", "plans_plan"."cost_monthly", "plans_plan"."cost_yearly", T10."id", T10."set_num", T10."name", T10."year", T10."theme_id", T10."set_type", T10."num_parts", T10."default_inventory_id", T10."is_active", T10."is_accessory", T10."added_dt", T10."added_by_id", T10."last_modified_dt", T10."last_modified_by_id", T10."last_checked_for_bi", T10."descr", T10."primary_photo_id", T10."is_gear", T10."is_book", T10."search_vector", T10."mfhash_vector", "lego_setstatstotal"."set_id", "lego_setstatstotal"."hits", "lego_setstatstotal"."builds", "lego_setstatstotal"."likes", "lego_setstatstotal"."bi_downloads", "lego_setstatstotal"."featured_hits", "lego_setstatstotal"."user_hits" FROM "lego_moc" INNER JOIN "lego_baseset" ON ("lego_moc"."baseset_ptr_id" = "lego_baseset"."id") INNER JOIN "lego_theme" ON ("lego_baseset"."theme_id" = "lego_theme"."id") LEFT OUTER JOIN "lego_theme" T4 ON ("lego_theme"."parent_id" = T4."id") LEFT OUTER JOIN "lego_theme" T5 ON (T4."parent_id" = T5."id") INNER JOIN "lego_designer" ON ("lego_moc"."designer_id" = "lego_designer"."user_ptr_id") INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") LEFT OUTER JOIN "accounts_userplan" ON ("auth_user"."id" = "accounts_userplan"."user_id") LEFT OUTER JOIN "plans_plan" ON ("accounts_userplan"."plan_id" = "plans_plan"."id") LEFT OUTER JOIN "lego_baseset" T10 ON ("lego_moc"."parent_set_1_id" = T10."id") LEFT OUTER JOIN "lego_setstatstotal" ON ("lego_baseset"."id" = "lego_setstatstotal"."set_id") WHERE "lego_baseset"."set_num" = 'MOC-114890' LIMIT 21SELECT ••• FROM "lego_moc" INNER JOIN "lego_baseset" ON ("lego_moc"."baseset_ptr_id" = "lego_baseset"."id") INNER JOIN "lego_theme" ON ("lego_baseset"."theme_id" = "lego_theme"."id") LEFT OUTER JOIN "lego_theme" T4 ON ("lego_theme"."parent_id" = T4."id") LEFT OUTER JOIN "lego_theme" T5 ON (T4."parent_id" = T5."id") INNER JOIN "lego_designer" ON ("lego_moc"."designer_id" = "lego_designer"."user_ptr_id") INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") LEFT OUTER JOIN "accounts_userplan" ON ("auth_user"."id" = "accounts_userplan"."user_id") LEFT OUTER JOIN "plans_plan" ON ("accounts_userplan"."plan_id" = "plans_plan"."id") LEFT OUTER JOIN "lego_baseset" T10 ON ("lego_moc"."parent_set_1_id" = T10."id") LEFT OUTER JOIN "lego_setstatstotal" ON ("lego_baseset"."id" = "lego_setstatstotal"."set_id") WHERE "lego_baseset"."set_num" = 'MOC-114890' LIMIT 21
10.75
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(423)
moc = Moc.all_objects.select_related('designer', 'stats').get(set_num=set_num)
SELECTDISTINCT ("taggit_taggeditem"."object_id") AS "_prefetch_related_val", "taggit_tag"."id", "taggit_tag"."name", "taggit_tag"."slug" FROM "taggit_tag" INNER JOIN "taggit_taggeditem" ON ("taggit_tag"."id" = "taggit_taggeditem"."tag_id") INNER JOIN "django_content_type" ON ("taggit_taggeditem"."content_type_id" = "django_content_type"."id") WHERE ("django_content_type"."app_label" = 'lego' AND "django_content_type"."model" = 'moc' AND "taggit_taggeditem"."object_id" IN (138061))SELECT ••• FROM "taggit_tag" INNER JOIN "taggit_taggeditem" ON ("taggit_tag"."id" = "taggit_taggeditem"."tag_id") INNER JOIN "django_content_type" ON ("taggit_taggeditem"."content_type_id" = "django_content_type"."id") WHERE ("django_content_type"."app_label" = 'lego' AND "django_content_type"."model" = 'moc' AND "taggit_taggeditem"."object_id" IN (138061))
0.31
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(423)
moc = Moc.all_objects.select_related('designer', 'stats').get(set_num=set_num)
SELECT "lego_inventory"."id", "lego_inventory"."set_id", "lego_inventory"."version", "lego_inventory"."name", "lego_inventory"."is_active", "lego_inventory"."num_parts", "lego_inventory"."num_versions" FROM "lego_inventory" WHERE ("lego_inventory"."set_id" = 138061 AND "lego_inventory"."version" = 1) LIMIT 21SELECT ••• FROM "lego_inventory" WHERE ("lego_inventory"."set_id" = 138061 AND "lego_inventory"."version" = 1) LIMIT 21
0.22
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(523)
inventory = get_object_or_404(Inventory.all_objects, set=moc, version=inventory_version)
SELECT "lego_changelog"."id", "lego_changelog"."timestamp", "lego_changelog"."user_id", "lego_changelog"."model", "lego_changelog"."instance_id", "lego_changelog"."set_num", "lego_changelog"."part_num", "lego_changelog"."old_value", "lego_changelog"."new_value" FROM "lego_changelog" WHERE "lego_changelog"."set_num" = 'MOC-114890' ORDER BY "lego_changelog"."timestamp" DESCSELECT ••• FROM "lego_changelog" WHERE "lego_changelog"."set_num" = 'MOC-114890' ORDER BY "lego_changelog"."timestamp" DESC
0.95
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(538)
changes = moc.get_change_summary()/home/nathan/rb/site/./lego/models/sets.py in get_change_summary(1121)
changes = ChangeLog.get_changes(set_num=self.set_num)/home/nathan/rb/site/./lego/models/changes.py in get_changes(276)
if len(changes) > 0:
SELECT "lego_mocinstructions"."id", "lego_mocinstructions"."moc_id", "lego_mocinstructions"."uploaded", "lego_mocinstructions"."file_size", "lego_mocinstructions"."to_be_uploaded", "lego_mocinstructions"."s3file_id", "lego_files_s3file"."id", "lego_files_s3file"."file_size", "lego_files_s3file"."last_modified", "lego_files_s3file"."aws_mi_file", "lego_files_s3file"."linode_si_file", "lego_files_s3file"."linode_mi_file", "lego_files_s3file"."linode_media_file" FROM "lego_mocinstructions" LEFT OUTER JOIN "lego_files_s3file" ON ("lego_mocinstructions"."s3file_id" = "lego_files_s3file"."id") WHERE "lego_mocinstructions"."moc_id" = 138061SELECT ••• FROM "lego_mocinstructions" LEFT OUTER JOIN "lego_files_s3file" ON ("lego_mocinstructions"."s3file_id" = "lego_files_s3file"."id") WHERE "lego_mocinstructions"."moc_id" = 138061
0.26
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(548)
context['bi_files'] = MocInstructions.get_moc_files(moc)/home/nathan/rb/site/./lego/models/mocs.py in get_moc_files(2066)
files = sorted(files, key=lambda x: str(x.file))
SELECT COUNT(*) AS "__count" FROM "django_comments" WHERE ("django_comments"."content_type_id" = 31 ANDNOT "django_comments"."is_removed" AND "django_comments"."object_pk" = '138061')SELECT ••• FROM "django_comments" WHERE ("django_comments"."content_type_id" = 31 ANDNOT "django_comments"."is_removed" AND "django_comments"."object_pk" = '138061')
0.16
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(637)
context['num_comments'] = Comment.objects.filter(object_pk=moc.id, content_type=ContentType.objects.get_for_model(moc), is_removed=False).count()
SELECT "countries_plus_country"."iso", "countries_plus_country"."iso3", "countries_plus_country"."iso_numeric", "countries_plus_country"."fips", "countries_plus_country"."name", "countries_plus_country"."capital", "countries_plus_country"."area", "countries_plus_country"."population", "countries_plus_country"."continent", "countries_plus_country"."tld", "countries_plus_country"."currency_code", "countries_plus_country"."currency_symbol", "countries_plus_country"."currency_name", "countries_plus_country"."phone", "countries_plus_country"."postal_code_format", "countries_plus_country"."postal_code_regex", "countries_plus_country"."languages", "countries_plus_country"."geonameid", "countries_plus_country"."neighbours", "countries_plus_country"."equivalent_fips_code" FROM "countries_plus_country" WHERE "countries_plus_country"."iso" = 'US' LIMIT 21SELECT ••• FROM "countries_plus_country" WHERE "countries_plus_country"."iso" = 'US' LIMIT 21
0.13
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./rb/templatetags/rb_geo.py in geo_currency(20)
geo_data = user.geo.get_user_currency()/home/nathan/rb/site/./geo/geo.py in get_user_currency(252)
country = Country.objects.get(iso=country_code)
412
</a>
413
</li>
414
<li class="hidden-xs">
415
{% geo_currency request.user %}
416
</li>
417
{% comment %}
418
<li class="hidden-xs hidden-sm">
419
<a href={% if request.user.is_authenticated %}"{% url 'user_profile_settings' request.user.get_username %}#personalisation"{% else %}"#" onclick="return false;"{% endif %} title="All date/times are being converted to this timezone">{% get_user_timezone request.user %}</a>
SELECT COUNT(*) AS "__count" FROM "lego_inventory" WHERE ("lego_inventory"."is_active" AND "lego_inventory"."set_id" = 138061)SELECT ••• FROM "lego_inventory" WHERE ("lego_inventory"."is_active" AND "lego_inventory"."set_id" = 138061)
2 similar queries.
Duplicated 2 times.
0.10
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/sets.py in get_num_inventories(981)
return Inventory.objects.filter(set=self).count()
16
<div class="mb-10">
17
<span>{{ moc.set_num }}</span>
18
•
19
<span><a href="#parts_scroll" title="See the parts in this MOC's inventory">{{ moc.num_parts }} parts{% if moc.get_num_inventories > 1 %} <span class="label label-primary">v{{ inventory.version }}</span>{% endif %}</a></span>
SELECT "lego_mocimage"."id", "lego_mocimage"."moc_id", "lego_mocimage"."is_primary", "lego_mocimage"."file_extension" FROM "lego_mocimage" WHERE "lego_mocimage"."moc_id" = 138061 ORDER BY "lego_mocimage"."is_primary" DESC, "lego_mocimage"."id" ASCSELECT ••• FROM "lego_mocimage" WHERE "lego_mocimage"."moc_id" = 138061 ORDER BY "lego_mocimage"."is_primary" DESC, "lego_mocimage"."id" ASC
2 similar queries.
Duplicated 2 times.
0.27
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
25
<div class="alert alert-danger"><h4><i class="fa fa-warning"></i> This MOC is disabled.</h4></div>
26
{% endif %}
27
28
{% if moc.use_fake_image %}
29
30
{% thumbs moc.use_fake_image.img_dir settings.THUMBS_OPTIONS_MOC_TILE as thumb_img %}
31
{% thumbs_encoded moc.use_fake_image.img_dir settings.THUMBS_OPTIONS_MOC_MAIN_PREVIEW as preview_img %}
32
{% thumbs moc.use_fake_image.img_dir settings.THUMBS_OPTIONS_MOC_MAIN get_real_dims=1 as first_image %}
SELECT "lego_mocimage"."id", "lego_mocimage"."moc_id", "lego_mocimage"."is_primary", "lego_mocimage"."file_extension" FROM "lego_mocimage" WHERE "lego_mocimage"."moc_id" = 138061 ORDER BY "lego_mocimage"."is_primary" DESC, "lego_mocimage"."id" ASCSELECT ••• FROM "lego_mocimage" WHERE "lego_mocimage"."moc_id" = 138061 ORDER BY "lego_mocimage"."is_primary" DESC, "lego_mocimage"."id" ASC
2 similar queries.
Duplicated 2 times.
0.09
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
81
{% else %}
82
83
{# only loops once, but easy way to grab it #}
84
{% for image in moc.moc_images.all %}
85
{% thumbs image.img_dir settings.THUMBS_OPTIONS_MOC_TILE as thumb_img %}
86
{% thumbs_encoded image.img_dir settings.THUMBS_OPTIONS_MOC_MAIN_PREVIEW as preview_img %}
87
{% thumbs image.img_dir settings.THUMBS_OPTIONS_MOC_MAIN get_real_dims=1 as first_image %}
SELECT COUNT(*) AS "__count" FROM "lego_inventory" WHERE ("lego_inventory"."is_active" AND "lego_inventory"."set_id" = 138061)SELECT ••• FROM "lego_inventory" WHERE ("lego_inventory"."is_active" AND "lego_inventory"."set_id" = 138061)
2 similar queries.
Duplicated 2 times.
0.10
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/sets.py in get_num_inventories(981)
return Inventory.objects.filter(set=self).count()
16
<div class=" mb-30">
17
<span>{{ set.set_num }}</span>
18
•
19
<span><a href="#parts_scroll" title="See the parts in this MOC's inventory">{{ set.num_parts }} parts{% if set.get_num_inventories > 1 %} <span class="label label-primary">v{{ inventory.version }}</span>{% endif %}</a></span>
20
•
21
<span><a href="{% url 'browse_mocs' %}?theme={{ set.theme_id }}" title="Find other MOCs in this theme">{{ set.theme.get_full_name }}</a></span>
SELECT "blog_article"."id", "blog_article"."title", "blog_article"."author_id", "blog_article"."published_date", "blog_article"."is_active", "blog_article"."body", "blog_article"."meta_description", "blog_article"."meta_img", "blog_article"."slug", "blog_article"."category_id", "blog_article"."ads", "blog_article"."show_ads_for_set_num", "blog_article"."review_for_set_num", "blog_article"."status", "blog_article"."scheduled_net", "blog_article"."ready_for_review_date", "blog_article"."is_sensitive", "blog_article"."search_vector" FROM "blog_article" WHERE ("blog_article"."is_active" AND "blog_article"."review_for_set_num"::text LIKE '%MOC-114890%') ORDER BY "blog_article"."published_date" ASCSELECT ••• FROM "blog_article" WHERE ("blog_article"."is_active" AND "blog_article"."review_for_set_num"::text LIKE '%MOC-114890%') ORDER BY "blog_article"."published_date" ASC
0.27
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/sets.py in get_set_review(1393)
for review in reviews:
22
</div>
23
</div>
24
25
{% with moc.get_set_review as review %}
26
{% if review %}
27
<div class="text-center">
28
<a href="{{ review.get_absolute_url }}"><i class="fa fa-star"></i> See our Review of this MOC</a>
SELECT 1 AS "a" FROM "lego_mocswitherrors" WHERE "lego_mocswitherrors"."moc_id" = 138061 LIMIT 1SELECT ••• FROM "lego_mocswitherrors" WHERE "lego_mocswitherrors"."moc_id" = 138061 LIMIT 1
0.09
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/mocs.py in is_alternate(204)
if not self.is_pending and MocsWithErrors.objects.filter(moc=self).exists():
153
154
</div>
155
<div class="p-10"> {# aligned to bottom via flex-grow in above div #}
156
{% if moc.is_alternate and moc.parent_set_1 and not moc.parent_set_2 %}
SELECT COUNT(*) AS "__count" FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355SELECT ••• FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355
4 similar queries.
Duplicated 4 times.
0.58
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
SELECT COUNT(*) AS "__count" FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355SELECT ••• FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355
4 similar queries.
Duplicated 4 times.
0.11
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/designers.py in get_num_followers_formatted(231)
i = DesignerFollower.objects.filter(designer_id=self.id).count()
SELECT COUNT(*) AS "__count" FROM "accounts_usersetphoto" INNER JOIN "auth_user" ON ("accounts_usersetphoto"."user_id" = "auth_user"."id") WHERE ("accounts_usersetphoto"."is_active" AND "accounts_usersetphoto"."set_id" = 138061 AND "auth_user"."is_active")SELECT ••• FROM "accounts_usersetphoto" INNER JOIN "auth_user" ON ("accounts_usersetphoto"."user_id" = "auth_user"."id") WHERE ("accounts_usersetphoto"."is_active" AND "accounts_usersetphoto"."set_id" = 138061 AND "auth_user"."is_active")
0.34
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
SELECT "lego_inventory"."id", "lego_inventory"."set_id", "lego_inventory"."version", "lego_inventory"."name", "lego_inventory"."is_active", "lego_inventory"."num_parts", "lego_inventory"."num_versions" FROM "lego_inventory" WHERE "lego_inventory"."id" = 188869 LIMIT 21SELECT ••• FROM "lego_inventory" WHERE "lego_inventory"."id" = 188869 LIMIT 21
0.11
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/templatetags/sets/drawing.py in render_set(24)
inventory = set.get_default_inventory()/home/nathan/rb/site/./lego/models/sets.py in get_default_inventory(971)
if self.default_inventory is not None:
SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'lego' AND "django_content_type"."model" = 'moc') LIMIT 21SELECT ••• FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'lego' AND "django_content_type"."model" = 'moc') LIMIT 21
0.12
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./rb_comments/templatetags/rb_comments_filters.py in get_page_locked_status(78)
content_type = ContentType.objects.get(app_label=page_content_type.split('.')[0], model=page_content_type.split('.')[1])
4
{% load rb_comments_filters %}
5
6
<div id="comments-{{ page.id }}">
7
{% get_page_locked_status content_type page.id as is_page_locked %}
8
9
{% comment %}
10
Not using render_comment_list as it uses styles in ul/li that I can't seem to get working well with Smarty.
11
Using fluent-comments to hide unused fields and do ajax add/reply comment.
SELECT 1 AS "a" FROM "rb_comments_pagelocked" WHERE ("rb_comments_pagelocked"."content_type_id" = 31 AND "rb_comments_pagelocked"."object_id" = 138061) LIMIT 1SELECT ••• FROM "rb_comments_pagelocked" WHERE ("rb_comments_pagelocked"."content_type_id" = 31 AND "rb_comments_pagelocked"."object_id" = 138061) LIMIT 1
0.09
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./rb_comments/templatetags/rb_comments_filters.py in get_page_locked_status(79)
is_locked = PageLocked.objects.filter(content_type=content_type, object_id=page_id).exists()
4
{% load rb_comments_filters %}
5
6
<div id="comments-{{ page.id }}">
7
{% get_page_locked_status content_type page.id as is_page_locked %}
8
9
{% comment %}
10
Not using render_comment_list as it uses styles in ul/li that I can't seem to get working well with Smarty.
11
Using fluent-comments to hide unused fields and do ajax add/reply comment.
SELECT ("auth_user_groups"."user_id") AS "_prefetch_related_val_user_id", "auth_group"."id", "auth_group"."name" FROM "auth_group" INNER JOIN "auth_user_groups" ON ("auth_group"."id" = "auth_user_groups"."group_id") WHERE "auth_user_groups"."user_id" IN (1573060, 1064966)SELECT ••• FROM "auth_group" INNER JOIN "auth_user_groups" ON ("auth_group"."id" = "auth_user_groups"."group_id") WHERE "auth_user_groups"."user_id" IN (1573060, 1064966)
2 similar queries.
Duplicated 2 times.
0.14
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/venv_rb310/lib/python3.10/site-packages/django_comments/templatetags/comments.py in render(71)
qs = self.get_queryset(context)/home/nathan/rb/site/./rb_comments/templatetags/rb_comments_filters.py in get_queryset(45)
return qs[:50], len(qs)
14
{% endcomment %}
15
{% if not comment_list %}
16
{# Get comments for a page #}
17
{% get_rb_comment_list for page as comment_list %}
SELECT COUNT(*) AS "__count" FROM "threadedcomments_comment" INNER JOIN "django_comments" ON ("threadedcomments_comment"."comment_ptr_id" = "django_comments"."id") WHERE ("django_comments"."content_type_id" = 31 AND "django_comments"."object_pk" = '138061' AND "django_comments"."site_id" = 1 AND "django_comments"."is_public" ANDNOT "django_comments"."is_removed")SELECT ••• FROM "threadedcomments_comment" INNER JOIN "django_comments" ON ("threadedcomments_comment"."comment_ptr_id" = "django_comments"."id") WHERE ("django_comments"."content_type_id" = 31 AND "django_comments"."object_pk" = '138061' AND "django_comments"."site_id" = 1 AND "django_comments"."is_public" ANDNOT "django_comments"."is_removed")
0.17
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/venv_rb310/lib/python3.10/site-packages/django_comments/templatetags/comments.py in render(72)
context[self.as_varname] = self.get_context_value_from_queryset(context, qs)/home/nathan/venv_rb310/lib/python3.10/site-packages/threadedcomments/templatetags/threadedcomments_tags.py in get_context_value_from_queryset(116)
return qs.count()
15
{% if not comment_list %}
16
{# Get comments for a page #}
17
{% get_rb_comment_list for page as comment_list %}
SELECT ("auth_user_groups"."user_id") AS "_prefetch_related_val_user_id", "auth_group"."id", "auth_group"."name" FROM "auth_group" INNER JOIN "auth_user_groups" ON ("auth_group"."id" = "auth_user_groups"."group_id") WHERE "auth_user_groups"."user_id" IN (1573060, 1064966)SELECT ••• FROM "auth_group" INNER JOIN "auth_user_groups" ON ("auth_group"."id" = "auth_user_groups"."group_id") WHERE "auth_user_groups"."user_id" IN (1573060, 1064966)
2 similar queries.
Duplicated 2 times.
0.13
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
89
{% with cache_timeout=user.is_authenticated|yesno:"0,300" %}
SELECT "avatar_avatar"."id", "avatar_avatar"."user_id", "avatar_avatar"."primary", "avatar_avatar"."avatar", "avatar_avatar"."date_uploaded" FROM "avatar_avatar" WHERE "avatar_avatar"."user_id" = 1573060 ORDER BY "avatar_avatar"."primary" DESC, "avatar_avatar"."date_uploaded" DESC LIMIT 1SELECT ••• FROM "avatar_avatar" WHERE "avatar_avatar"."user_id" = 1573060 ORDER BY "avatar_avatar"."primary" DESC, "avatar_avatar"."date_uploaded" DESCLIMIT 1
2 similar queries.
0.11
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./avatar/templatetags/avatar_tags.py in avatar_url(33)
avatar_url = provider.get_avatar_url(user, size)/home/nathan/rb/site/./avatar/providers.py in get_avatar_url(48)
avatar = get_primary_avatar(user, size)/home/nathan/rb/site/./avatar/utils.py in get_primary_avatar(120)
avatar = user.avatar_set.order_by("-primary", "-date_uploaded")[0]
SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", "lego_designer"."user_ptr_id", "lego_designer"."auto_approve", "lego_designer"."num_auto_approved", "lego_designer"."last_checked_for_moc_errors" FROM "lego_designer" INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") WHERE "lego_designer"."user_ptr_id" = 1573060 LIMIT 21SELECT ••• FROM "lego_designer" INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") WHERE "lego_designer"."user_ptr_id" = 1573060 LIMIT 21
2 similar queries.
0.12
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./accounts/models/user_extras.py in get_rolename(618)
elif hasattr(self, 'designer') and Moc.objects.filter(designer=self.designer).exists():
57
{% elif page.is_moc and page.designer_id == comment.user_id %}
58
<span class="label label-dark-blue" title="This user designed this MOC">Designed this MOC</span>
SELECT 1 AS "a" FROM "accounts_mocpurchase" WHERE ("accounts_mocpurchase"."is_active" AND "accounts_mocpurchase"."moc_id" = 138061 AND "accounts_mocpurchase"."user_id" = 1573060) LIMIT 1SELECT ••• FROM "accounts_mocpurchase" WHERE ("accounts_mocpurchase"."is_active" AND "accounts_mocpurchase"."moc_id" = 138061 AND "accounts_mocpurchase"."user_id" = 1573060) LIMIT 1
2 similar queries.
0.11
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./rb_comments/templatetags/rb_comments_filters.py in get_verified_purchase(97)
if user.has_purchased_moc(moc.id):/home/nathan/rb/site/./accounts/models/user_extras.py in has_purchased_moc(1008)
return MocPurchase.objects.filter(user=self, moc_id=moc_id).exists()
SELECT "avatar_avatar"."id", "avatar_avatar"."user_id", "avatar_avatar"."primary", "avatar_avatar"."avatar", "avatar_avatar"."date_uploaded" FROM "avatar_avatar" WHERE "avatar_avatar"."user_id" = 1064966 ORDER BY "avatar_avatar"."primary" DESC, "avatar_avatar"."date_uploaded" DESC LIMIT 1SELECT ••• FROM "avatar_avatar" WHERE "avatar_avatar"."user_id" = 1064966 ORDER BY "avatar_avatar"."primary" DESC, "avatar_avatar"."date_uploaded" DESCLIMIT 1
2 similar queries.
0.10
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./avatar/templatetags/avatar_tags.py in avatar_url(33)
avatar_url = provider.get_avatar_url(user, size)/home/nathan/rb/site/./avatar/providers.py in get_avatar_url(48)
avatar = get_primary_avatar(user, size)/home/nathan/rb/site/./avatar/utils.py in get_primary_avatar(120)
avatar = user.avatar_set.order_by("-primary", "-date_uploaded")[0]
SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", "lego_designer"."user_ptr_id", "lego_designer"."auto_approve", "lego_designer"."num_auto_approved", "lego_designer"."last_checked_for_moc_errors" FROM "lego_designer" INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") WHERE "lego_designer"."user_ptr_id" = 1064966 LIMIT 21SELECT ••• FROM "lego_designer" INNER JOIN "auth_user" ON ("lego_designer"."user_ptr_id" = "auth_user"."id") WHERE "lego_designer"."user_ptr_id" = 1064966 LIMIT 21
2 similar queries.
0.12
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./accounts/models/user_extras.py in get_rolename(618)
elif hasattr(self, 'designer') and Moc.objects.filter(designer=self.designer).exists():
57
{% elif page.is_moc and page.designer_id == comment.user_id %}
58
<span class="label label-dark-blue" title="This user designed this MOC">Designed this MOC</span>
SELECT 1 AS "a" FROM "accounts_mocpurchase" WHERE ("accounts_mocpurchase"."is_active" AND "accounts_mocpurchase"."moc_id" = 138061 AND "accounts_mocpurchase"."user_id" = 1064966) LIMIT 1SELECT ••• FROM "accounts_mocpurchase" WHERE ("accounts_mocpurchase"."is_active" AND "accounts_mocpurchase"."moc_id" = 138061 AND "accounts_mocpurchase"."user_id" = 1064966) LIMIT 1
2 similar queries.
0.20
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./rb_comments/templatetags/rb_comments_filters.py in get_verified_purchase(97)
if user.has_purchased_moc(moc.id):/home/nathan/rb/site/./accounts/models/user_extras.py in has_purchased_moc(1008)
return MocPurchase.objects.filter(user=self, moc_id=moc_id).exists()
SELECT COUNT(*) AS "__count" FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355SELECT ••• FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355
4 similar queries.
Duplicated 4 times.
0.15
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)
SELECT COUNT(*) AS "__count" FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355SELECT ••• FROM "lego_designerfollower" WHERE "lego_designerfollower"."designer_id" = 163355
4 similar queries.
Duplicated 4 times.
0.13
Connection: default
Transaction status: Idle
/home/nathan/venv_rb310/lib/python3.10/site-packages/ratelimit/decorators.py in _wrapped(30)
return fn(*args, **kw)/home/nathan/rb/site/./lego/views/mocs.py in moc_details(690)
return render(request, 'mocs/moc_details.html', context)/home/nathan/rb/site/./lego/models/designers.py in get_num_followers_formatted(231)
i = DesignerFollower.objects.filter(designer_id=self.id).count()