0

Tried the solutions provided in question asked by Daniel Costa.

Here is my models.py file

class Integrations(models.Model):
    integration_id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False)
    integration_type = models.CharField(primary_key=True, max_length=256)

    def __str__(self):
        return self.integration_type

    class Meta:
        ordering = ["integration_type"]
        verbose_name = "Integration"
        verbose_name_plural = "Integrations"


def get_default_mqtt():
    return Integrations.objects.get(integration_type="MQTT")

class MQTTSubscription(models.Model):
    mqtt_subscription_name = models.CharField(
        max_length=256, verbose_name="Subscription Name"
    )
    mqtt_url = models.CharField(max_length=256, verbose_name="Mqtt Host")
    integration_type = models.ForeignKey(
        Integrations, default=get_default_mqtt, on_delete=models.PROTECT
    )

    def __str__(self):
        return self.mqtt_subscription_name

   class Meta:
        ordering = ["mqtt_subscription_name"]
        verbose_name = "MQTT Subscription"

The urls.py

integrations_list = IntegrationsViewSet.as_view({"get": "list", "post": "create"})
integrations_detail = IntegrationsViewSet.as_view(
    {"get": "retrieve", "put": "update", "delete": "destroy"}
)


mqtt_list = MQTTSubscriptionViewSet.as_view({"get": "list", "post": "create"})
mqtt_detail = MQTTSubscriptionViewSet.as_view(
    {"get": "retrieve", "put": "update", "delete": "destroy"}
)

urlpatterns = [
    path("integrations/", integrations_list, name="integrations_list"),
    path("integrations/<str:integration_type>/", integrations_detail, name="integrations_detaial"),
    path("mqttsubscription/", mqtt_list, name="mqtt_list"),
    path("mqttsubscription/<str:mqtt_subscription_name>/", mqtt_detail, name="mqtt_detail"),
]

Views.py

class IntegrationsViewSet(viewsets.ModelViewSet):
    serializer_class = IntegrationsSerializer
    queryset = Integrations.objects.all()
    lookup_field = "integration_type"

class MQTTSubscriptionViewSet(viewsets.ModelViewSet):
    serializer_class = MQTTSubscriptionSerializer
    queryset = MQTTSubscription.objects.all()
    lookup_field = "mqtt_subscription_name"

serializers.py

class IntegrationsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Integrations
        fields = ["integration_type"]

class MQTTSubscriptionSerializer(serializers.ModelSerializer):
    lookup_field = "integration_name"
    class Meta:
        model = MQTTSubscription
        fields = [
            "mqtt_subscription_name",
            "mqtt_url",
            "integration_type",
        ]

The issue here is if "integrations/" is removed from urls.py it does not interpret the mqttsubscription/. While I update the lookup field it does not help.

Can someone point me what I am doing wrong here? Thanks in Advance

Adv3012
  • 19
  • 1

0 Answers0