Django Query-set Foreign Key в фрейме данных Pandas Получение дублирующихся значений

У меня есть такие модели.

class Product(models.Model):
    id = models.UUIDField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    status = models.IntegerField(blank=True, null=True)
    sellerid = models.ForeignKey(
        "Seller", models.DO_NOTHING, db_column="sellerId", blank=True, null=True
    )  # Field name made lowercase.
    groupid = models.ForeignKey(
        Group, models.DO_NOTHING, db_column="groupId", blank=True, null=True
    )  # Field name made lowercase.
    createdat = models.DateTimeField(
        db_column="createdAt", blank=True, null=True
    )  # Field name made lowercase.
    updatedat = models.DateTimeField(
        db_column="updatedAt", blank=True, null=True
    )  # Field name made lowercase.
    

    class Meta:
        managed = False
        db_table = "product"
class Group(models.Model):
    id = models.UUIDField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    description = models.CharField(max_length=255, blank=True, null=True)
    status = models.IntegerField(blank=True, null=True)
    image = models.CharField(max_length=255, blank=True, null=True)
    createdat = models.DateTimeField(
        db_column="createdAt", blank=True, null=True
    )  # Field name made lowercase.
    updatedat = models.DateTimeField(
        db_column="updatedAt", blank=True, null=True
    )  # Field name made lowercase.
    class Meta:
        managed = False
        db_table = "group" 

class SubCategoryGroup(models.Model):
    id = models.UUIDField(primary_key=True)
    subcategoryid = models.ForeignKey(
        SubCategory, models.DO_NOTHING, db_column="subCategoryId", blank=True, null=True
    )  # Field name made lowercase.
    groupid = models.ForeignKey(
        Group, models.DO_NOTHING, db_column="groupId", blank=True, null=True
    )  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = "sub_category_group"

А затем от подкатегории к категории. Я делаю запрос от Products, чтобы получить все, включая то, к какой категории и подкатегории они принадлежат, в кадр данных, поскольку

Вот запрос, который нужно вставить в кадр данных.

df = pd.DataFrame.from_records(
        Product.objects.using("reports")
        .filter(createdat__range=[from_date, to_date])
        .values_list(
            "id",
            "name",
            "status",
            "sellerid__name",
            "groupid__name",
            "createdat",
            "updatedat",
            "settlementprice",
        ),
        columns=[
            "id",
            "name",
            "seller name",
            "groupid name",
            "createdat",
            "updatedat",
        ],
    )
    new_df = pd.DataFrame.from_records(
        SubCategoryGroup.objects.using("reports")
        .all()
        .values_list(
            "subcategoryid__name", "groupid__name", "subcategoryid__categoryid__name"
        ),
        columns=["subcategory name", "groupid name", "category name"],
    )
    df = pd.merge(df, new_df, left_on="groupid name", right_on="groupid name")

При этом происходит слияние обоих наборов запросов для получения названия категории и названия подкатегории. В кадр данных продуктов, но слияние происходит неправильно. Я получаю дублирующиеся значения в датафрейме и данные не точны. Я что-то упускаю? Пожалуйста, помогите мне, также я не хотел использовать цикл for из-за эффективности, может ли кто-нибудь предложить самый быстрый способ сделать это, кроме dataframe?

Вернуться на верх